
    Fcl/                         d Z ddlZddlmZ ddlmZ ddlZddlZddlm	Z	 ddl
mZ ddlZddlmZ ddlmZ dd	lmZ dd
lmZmZmZ dZ ej        dd          Z G d dej        j        j                  ZdS )z:Tests for the Auth and AuthZ logging of password changes.
    N)SamDB)system_session)delete_force)Net)call)LdbError)PasswordCommon)EVT_ID_SUCCESSFUL_LOGONEVT_ID_UNSUCCESSFUL_LOGONEVT_LOGON_NETWORKauthlogtestuser    c                   X     e Zd Z fdZd Z fdZd Zd Zd Zd Z	d Z
d	 Zd
 Z xZS )AuthLogPassChangeTestsc                    t          t          |                                            t          j        d         | _        dt          j        d         z  }t          |t                      |                                 | 	                                          | _
        t          dt          | j
                  z             | j
                                        }t          d|z             t          j        | | j
                   | j
                                        | _        t#          | j
        dt$          z   dz   | j        z              | j
                            dt$          z   dz   | j        z   d	t$          t(          d
           |                                  t,          j                            dd          }|d}t3          t5          |                    | _        d S )N	SERVER_IPz	ldap://%sSERVER)urlsession_infocredentialslpzldb %sz
base_dn %szcn=
,cn=users,user)dnobjectclasssAMAccountNameuserPasswordGNUTLS_PBKDF2_SUPPORTT)allow_missing0)superr   setUposenviron	server_ipr   r   get_credentialsget_loadparmldbprinttype	domain_dnr	   allow_password_changesbase_dnr   	USER_NAMEadd	USER_PASSdiscardMessagessambatestsenv_get_var_valueboolintgnutls_pbkdf2_support)selfhostr-   r7   	__class__s       B/usr/lib/python3/dist-packages/samba/tests/auth_log_pass_change.pyr"   zAuthLogPassChangeTests.setUp,   s   $d++11333K0RZ11T&4&6&6%)%9%9%;%; --//1 1 1
 	hdh'(((($$&&lW$%%% 	-dDH===x))++ 	TXuy0<?$,NOOO)#l2T\A!'%	
 
 	 	 	 	 % = =# !> !  !  !($'!%)#.C*D*D%E%E"""    c                     | j         rdS dS )Nsamr_ChangePasswordUser4samr_ChangePasswordUser3)r7   )r8   s    r;   _authDescriptionz'AuthLogPassChangeTests._authDescriptionS   s    % 	.----r<   c                 V    t          t          |                                            d S )N)r!   r   tearDown)r8   r:   s    r;   rB   zAuthLogPassChangeTests.tearDownY   s&    $d++4466666r<   c                 R     fd}                                                                 }                                 }t          || j                  }d}|                    |t          t                                           	                    |          d           d S )Nc                    | d         dk    ou| d         d         dk    oc| d         d         dk    oQ| d         d                                          k    o-| d         d         t          k    o| d         d	         t          k    S )
Nr*   AuthenticationstatusNT_STATUS_OKserviceDescriptionSAMR Password ChangeauthDescriptioneventId	logonType)r@   r
   r   msgr8   s    r;   isLastExpectedMessagezPAuthLogPassChangeTests.test_admin_change_password.<locals>.isLastExpectedMessage]   s    [$44 	+)*84F	+)*+?@./	+ )*+<=--//0		+ )*95/0	+ )*;7)*	,r<   templateservernewPassword!!42)newpasswordusernameoldpassword$Did not receive the expected message)
insta_credsr&   r'   r   r%   change_passwordr.   r0   
assertTruewaitForMessages)r8   rO   credsr   netpasswords   `     r;   test_admin_change_passwordz1AuthLogPassChangeTests.test_admin_change_password\   s    
	, 
	, 
	, 
	, 
	,   $*>*>*@*@ AA  %DN333$%.(1 	 	3 	3 	3 	,,-BCC>	@ 	@ 	@ 	@ 	@r<   c                      fd}                                                                 }                                 }t          || j                  }d}d}	 |                    |t          t                     n# t          $ r d}Y nw xY w 	                    d|d            
                                         |          d	           d S )
Nc                    | d         dk    ou| d         d         dk    oc| d         d         dk    oQ| d         d                                          k    o-| d         d         t          k    o| d         d	         t          k    S )
Nr*   rE   rF   NT_STATUS_PASSWORD_RESTRICTIONrH   rI   rJ   rK   rL   r@   r   r   rM   s    r;   rO   zoAuthLogPassChangeTests.test_admin_change_password_new_password_fails_restriction.<locals>.isLastExpectedMessagev   s    [$44 
+)*8489
+ )*+?@./
+
 )*+<=--//0
+ )*9512
+ )*;7)*
,r<   rP   rR   newPasswordFrU   rW   rV   TExpected exception not thrownrX   )rY   r&   r'   r   r%   rZ   r0   r.   	ExceptionassertEqualr[   r\   r8   rO   r]   r   r^   r_   exception_throwns   `      r;   9test_admin_change_password_new_password_fails_restrictionzPAuthLogPassChangeTests.test_admin_change_password_new_password_fails_restrictionu   s#   	, 	, 	, 	, 	,   $*>*>*@*@ AA  %DN333  	$H,5)2   4 4 4 4  	$ 	$ 	$#	$/9	; 	; 	;,,-BCC>	@ 	@ 	@ 	@ 	@s   "B BBc                      fd}                                                                 }                                 }t          || j                  }d}d}	 |                    |t          d           n# t          $ r d}Y nw xY w                     d|d	            	                     
                    |          d
           d S )Nc                    | d         dk    ou| d         d         dk    oc| d         d         dk    oQ| d         d                                          k    o-| d         d         t          k    o| d         d	         t          k    S )
Nr*   rE   rF   NT_STATUS_NO_SUCH_USERrH   rI   rJ   rK   rL   rd   rM   s    r;   rO   z]AuthLogPassChangeTests.test_admin_change_password_unknown_user.<locals>.isLastExpectedMessage   s    [$44 
+)*8401
+ )*+?@./
+
 )*+<=--//0
+ )*9512
+ )*;7)*
,r<   rP   rR   rT   FbadUserrf   Trg   rX   )rY   r&   r'   r   r%   rZ   r0   rh   ri   r[   r\   rj   s   `      r;   'test_admin_change_password_unknown_userz>AuthLogPassChangeTests.test_admin_change_password_unknown_user   s%   	, 	, 	, 	, 	,   $*>*>*@*@ AA  %DN333$ 	$H,5)2   4 4 4 4  	$ 	$ 	$#	$/9	; 	; 	; 	,,-BCC>	@ 	@ 	@ 	@ 	@   A= =BBc                      fd}                                                                 }                                 }t          || j                  }d}d}	 |                    |dt                     n# t          $ r d}Y nw xY w                     d|d	            	                     
                    |          d
           d S )Nc                    | d         dk    ou| d         d         dk    oc| d         d         dk    oQ| d         d                                          k    o-| d         d         t          k    o| d         d	         t          k    S )
Nr*   rE   rF   NT_STATUS_WRONG_PASSWORDrH   rI   rJ   rK   rL   rd   rM   s    r;   rO   zfAuthLogPassChangeTests.test_admin_change_password_bad_original_password.<locals>.isLastExpectedMessage   s    [$44 
+)*8423
+ )*+?@./
+
 )*+<=--//0
+ )*9512
+ )*;7)*
,r<   rP   rR   rT   FbadPasswordrf   Trg   rX   )rY   r&   r'   r   r%   rZ   r.   rh   ri   r[   r\   rj   s   `      r;   0test_admin_change_password_bad_original_passwordzGAuthLogPassChangeTests.test_admin_change_password_bad_original_password   s%   	, 	, 	, 	, 	,   $*>*>*@*@ AA  %DN333$ 	$H,9)2   4 4 4 4  	$ 	$ 	$#	$/9	; 	; 	; 	,,-BCC>	@ 	@ 	@ 	@ 	@rr   c                 (   d }t          j        dd          }| j                            dt          z   dz   | j        z   dz   dz   dz   dz   t          z   dz   d	z   dz   |z   dz              |                     |                     |          d
           d S )Nc                     | d         dk    oc| d         d         dk    oQ| d         d         dk    o?| d         d         dk    o-| d         d	         t           k    o| d         d
         t          k    S )Nr*   rE   rF   rG   rH   LDAP Password ChangerJ   LDAP ModifyrK   rL   )r
   r   rN   s    r;   rO   zOAuthLogPassChangeTests.test_ldap_change_password.<locals>.isLastExpectedMessage   s    [$44 	+)*84F	+)*+?@./	+ )*+<=%&		+ )*95/0	+ )*;7)*	,r<   r   dn: cn=r   
changetype: modify
delete: userPassword
userPassword: add: userPassword
rX   )	r2   generate_random_passwordr(   modify_ldifr.   r-   r0   r[   r\   )r8   rO   new_passwords      r;   test_ldap_change_passwordz0AuthLogPassChangeTests.test_ldap_change_password   s    
	, 
	, 
	, 5b"==	!L04<?$F"#$%   )) ,00 "	"
 
  ,,
 /33	4 	4 	4 	,,-BCC>	@ 	@ 	@ 	@ 	@r<   c                    d }t          j        dd          }	 | j                            d| j        z   dz   dz   dz   dz   t
          z   dz   dz   dz   |z   dz              |                                  n!# t          $ r}|j        \  }}Y d }~nd }~ww xY w| 	                    | 
                    |          d	           d S )
Nc                 b    | d         dk    o#| d         d         dk    o| d         d         dk    S )Nr*   AuthorizationrH   LDAPauthTypekrb5 r|   s    r;   rO   zXAuthLogPassChangeTests.test_ldap_change_password_bad_user.<locals>.isLastExpectedMessage   sC    K?2 ?()=>&H?(4>@r<   r   zdn: cn=badUser,cn=users,r~   r   r   r   r   rX   )r2   r   r(   r   r-   r0   failr   argsr[   r\   )r8   rO   r   enumrN   s         r;   "test_ldap_change_password_bad_userz9AuthLogPassChangeTests.test_ldap_change_password_bad_user   s-   	@ 	@ 	@
 5b"==	H  4t|CdJ&'() !! $-- 044 &	&
 !!
 $00
 3778 8 8 IIKKKK 	 	 	JS#DDDD	 	,,-BCC>	@ 	@ 	@ 	@ 	@s   AA4 4
B>
BBc                    d }t          j        dd          }	 | j                            dt          z   dz   | j        z   dz   dz   dz   dz   d	z   dz   d
z   dz   |z   dz              |                                  n!# t          $ r}|j        \  }}Y d }~nd }~ww xY w| 	                    | 
                    |          d           d S )Nc                     | d         dk    oc| d         d         dk    oQ| d         d         dk    o?| d         d         dk    o-| d         d	         t           k    o| d         d
         t          k    S )Nr*   rE   rF   ru   rH   rz   rJ   r{   rK   rL   )r   r   r|   s    r;   rO   zeAuthLogPassChangeTests.test_ldap_change_password_bad_original_password.<locals>.isLastExpectedMessage  s    [$44 
+)*8423
+ )*+?@./
+
 )*+<=%&
+ )*9512
+ )*;7)*
,r<   r   r}   r   r~   r   r   r   rv   r   rX   )r2   r   r(   r   r.   r-   r   r   r   r[   r\   )r8   rO   r   e1r   rN   s         r;   /test_ldap_change_password_bad_original_passwordzFAuthLogPassChangeTests.test_ldap_change_password_bad_original_password  s4   	, 	, 	, 5b"==	H  I%4t|CdJ&'() !! $11 488 &	&
 !!
 $00
 3778 8 8 IIKKKK 	 	 	JS#DDDD	 	,,-BCC>	@ 	@ 	@ 	@ 	@s   AA: :
B
BB)__name__
__module____qualname__r"   r@   rB   r`   rl   rq   rw   r   r   r   __classcell__)r:   s   @r;   r   r   *   s        %F %F %F %F %FN. . .7 7 7 7 7@ @ @2@ @ @@@ @ @B@ @ @B@ @ @:@ @ @.@ @ @ @ @ @ @r<   r   )__doc__samba.testsr2   samba.samdbr   
samba.authr   r#   samba.tests.auth_log_baser   	samba.netr   
subprocessr   r(   r   samba.tests.password_testr	   samba.dcerpc.windows_event_idsr
   r   r   r.   r   r0   r3   auth_log_baseAuthLogTestBaser   r   r<   r;   <module>r      sV  $            % % % % % % 				         $ $ $ $ $ $                    4 4 4 4 4 4          	*E*2r22	~@ ~@ ~@ ~@ ~@U[6F ~@ ~@ ~@ ~@ ~@r<   