
    b                         d Z ddlZddlZddlZddlmZmZ ddlm	Z	 ddlm
Z
mZ ddlmZmZmZmZmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlZd Zd Z G d dej        j                  ZdS )zHTest whether various python calls segfault when given unexpected input.
    N)NetLIBNET_JOIN_AUTOMATIC)DONT_USE_KERBEROS)NTSTATUSErrorntstatus)miscdrsuapisamrunixinfo	dnsserver)authgensec)SamDB)netbios)registry)ldb)	messagingc                       fd}|S )Nc                     t          j                    }|dk    r	  | i | n*# t          $ r}t          j                     Y d }~nd }~ww xY wt
          j                                         t
          j                                         t          j	        d           t          j
        |d          \  }}t          j        |          r&t          j        |          }t          d|z            d S )Nr   zFailed with signal %d)osfork	Exception	traceback	print_excsysstderrflushstdout_exitwaitpidWIFSIGNALEDWTERMSIGAssertionError)argskwargspidepid2statussignalfs          6/usr/lib/python3/dist-packages/samba/tests/segfault.pywrapperz"segfault_detector.<locals>.wrapper(   s    gii!88&4"6"""" & & &#%%%%%%%%&JJHQKKKz#q))f>&!! 	C[((F !86!ABBB	C 	Cs   % 
AAA )r+   r-   s   ` r,   segfault_detectorr/   '   s(    C C C C C  N    c                 "     ddl m  fd}|S )Nr   )environc                  (    dd<    | i | d= d S )N1PLEASE_NO_GDB_BACKTRACEr.   )r$   r%   r2   r+   s     r,   wzno_gdb_backtrace.<locals>.w=   s2    -0)*	46-...r0   )r   r2   )r+   r6   r2   s   ` @r,   no_gdb_backtracer7   ;   s;    / / / / / /
 Hr0   c                   t   e Zd Zd Zd Zed             Zeed                         Zed             Z	ed             Z
ed             Zed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zeed                         Zeed                         Zeed                         Zeed                         Zeed                         ZdS )SegfaultTestsc                     t           j        d         }|                                 }|                     |                                 t
                    }|||fS )NSERVER)templatekerberos_state)r   r2   get_loadparminsta_credsget_credentialsr   )selfserverlpcredss       r,   get_lp_et_alzSegfaultTests.get_lp_et_alF   sY    H%    $*>*>*@*@0A ! C C5&  r0   c                 d    |                                  \  }}}d|z   }t          |||          }|S )Nzldap://)credentialsrC   )rE   r   )rA   rC   rD   rB   urlr   s         r,   	get_samdbzSegfaultTests.get_samdbN   s=     --//E6& CUr222
r0   c                     |                                  \  }}}t          |||          }|                    d|d t          j                               d S NrB   *   )rE   r   replicate_initr   GUID)rA   rC   rD   rB   nets        r,   test_net_replicate_init__1z(SegfaultTests.test_net_replicate_init__1T   sT     --//E6%F+++2r455555r0   c                     |                                  }|                                 \  }}}t          |||          }|                    ||dt	          j                               d S rK   )rI   rE   r   rN   r   rO   )rA   samdbrC   rD   rB   rP   s         r,   test_net_replicate_init__3z(SegfaultTests.test_net_replicate_init__3Z   se        --//E6%F+++5"b$)++66666r0   c                     |                                  \  }}}t          j                    }t          |||          }|                    dd|           d S )NrL   rM      )rE   r	   DsGetNCChangesCtr6r   replicate_chunk)rA   rC   rD   rB   ctrrP   s         r,   test_net_replicate_chunk_1z(SegfaultTests.test_net_replicate_chunk_1c   sZ     --//E6(**%F+++B3'''''r0   c                 t    t          j        ddg          }t          j                            |          }d S )NrM   sam)r   methodsauth_context)r   AuthContextr   Securitystart_server)rA   ags      r,   %test_auth_context_gensec_start_serverz3SegfaultTests.test_auth_context_gensec_start_serverj   s7    eW555 O((a(88r0   c                 2    t          j        dd          }d S )NrM   foo)r   	principal)r   user_session)rA   ss     r,   test_auth_user_sessionz$SegfaultTests.test_auth_user_sessionr   s    "666r0   c                 F    t           j                            d           d S )NrM   r^   )r   ra   rb   rA   s    r,   test_gensec_start_serverz&SegfaultTests.test_gensec_start_serverv   s!    $$"$55555r0   c                 X    t          j                    }|                    dd          }d S )N)rM   rg   	localhost)r   Node
query_name)rA   nts      r,   test_netbios_query_namez%SegfaultTests.test_netbios_query_namez   s$    LNNLLk22r0   c                 `    |                                  \  }}}|                    d           d S )NrM   )rE   encrypt_netr_crypt_password)rA   rC   rD   rB   s       r,    test_encrypt_netr_crypt_passwordz.SegfaultTests.test_encrypt_netr_crypt_password   s4     --//E6))"-----r0   c                     	 t          j        dd           d S # t          j        $ r}t	          d|z             Y d }~d S d }~ww xY w)N rM   )rG   failed with %s)r   open_ldbr   LdbErrorprintrA   r'   s     r,   test_hive_open_ldbz SegfaultTests.test_hive_open_ldb   sj    	(bb111111| 	( 	( 	("Q&'''''''''	(s    AAAc                     	 t          j        dddd           d S # t          j        $ r}t	          d|z             Y d }~d S d }~ww xY w)Nrj   r{   )r   	open_hiver   r}   r~   r   s     r,   test_hive_open_hivez!SegfaultTests.test_hive_open_hive   sk    	(sCc22222| 	( 	( 	("Q&'''''''''	(s    AAAc                     t          j                    }t          j        d          }	 |                    |           n# t           j        $ r Y nw xY wt          |           d S )Nq)r   MessageMessageElementaddr}   str)rA   mr'   s      r,   test_ldb_add_nameless_elementz+SegfaultTests.test_ldb_add_nameless_element   sd    KMMs##	EE!HHHH| 	 	 	D	As   ? AAc                 .    t          j        d           d S Nrz   )r   register_modulerm   s    r,   test_ldb_register_modulez&SegfaultTests.test_ldb_register_module   s    Br0   c                 4    t          j        dddd           d S )Nrj   F)r   
deregisterrm   s    r,   test_messaging_deregisterz'SegfaultTests.test_messaging_deregister   s    S#sE22222r0   c                 <    ddl m} |                    d           d S )Nr   )echorz   )samba.dcerpcr   rpcecho)rA   r   s     r,   test_rpcechozSegfaultTests.test_rpcecho   s,    %%%%%%Rr0   c                 6    dt          j                    _        dS )zThere are many pidl generated functions that crashed on this
        pattern, where a NULL pointer was created rather than an empty
        structure.rV   N)r
   Connect5out_info_outrm   s    r,   test_dcerpc_idl_ref_elementsz*SegfaultTests.test_dcerpc_idl_ref_elements   s    
 ()$$$r0   c                 6    t          j                    j         dS )z$Dereferencing is sufficient to crashN)r   GetPWUid	out_infosrm   s    r,   !test_dcerpc_idl_unixinfo_elementsz/SegfaultTests.test_dcerpc_idl_unixinfo_elements   s     	%%%%r0   c                 6    t          j                    j         dS )z'Inline arrays were incorrectly handled.N)r   DNS_RPC_SERVER_INFO_DOTNETpExtensionsrm   s    r,   test_dcerpc_idl_inline_arraysz+SegfaultTests.test_dcerpc_idl_inline_arrays   s     	,..::::r0   c                 f    t          j                    }t          j                    }|||g|_        dS )z0Setting an inline array was incorrectly handled.N)r   DNS_EXTENSIONDNS_RPC_DP_INFOpwszReserved)rA   rc   xs      r,   !test_dcerpc_idl_set_inline_arraysz/SegfaultTests.test_dcerpc_idl_set_inline_arrays   s1     #%%%''Qr0   c                 V    ddl m} |                                }d|_        |j         d S )Nr   )dnsp   )r   r   string_listcountr   )rA   r   rj   s      r,   test_dnsp_string_listz#SegfaultTests.test_dnsp_string_list   s9     	&%%%%%	r0   c                 b    ddl m} ddlm}m}  |g d          }|j        |_        |j         d S )Nr   )	TXTRecord)r   r   )rc   bc)samba.dnsserverr   r   r   r   
DNS_TYPE_AwTypedata)rA   r   r   r   recs        r,   test_dns_recordzSegfaultTests.test_dns_record   sU     	.-----00000000i((O	r0   c                     |                                  }t          j                    }t          j        |d          |_        |                    ||          }~|j         d S r   )rI   r   r   Dndnmsg_diff)rA   rS   msgdiffs       r,   test_ldb_msg_diffzSegfaultTests.test_ldb_msg_diff   sR       kmmr""~~c3''r0   c                 0    t          j                    }|`d S )N)r   r   r   )rA   r   s     r,   test_ldb_msg_del_dnz!SegfaultTests.test_ldb_msg_del_dn   s     kmmFFFr0   c                 \    |                                  }t          j        |d          }|`d S )Nzrelax:1)rI   r   Controlcritical)rA   rS   r   s      r,   test_ldb_control_del_criticalz+SegfaultTests.test_ldb_control_del_critical   s-       Ky))JJJr0   N)__name__
__module____qualname__rE   rI   r/   rQ   r7   rT   rZ   re   rk   rn   ru   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r0   r,   r9   r9   E   s       ! ! !   6 6 6
 7 7  7 ( ( ( 9 9 9 7 7 7 6 6 6 3 3 3 . . . ( ( ( ( ( (          3 3 3    ) ) ) & & & ; ; ; # # #                      r0   r9   ) __doc__samba.testssambar   r   	samba.netr   r   samba.credentialsr   r   r   r   r   r	   r
   r   r   r   r   samba.samdbr   r   r   r   r   r   r/   r7   testsTestCaser9   r.   r0   r,   <module>r      sz  &      				 



 0 0 0 0 0 0 0 0 / / / / / / ) ) ) ) ) ) ) ) A A A A A A A A A A A A A A                                            (  i i i i iEK( i i i i ir0   