
    ba                         d Z ddl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ZddlZddlmZ ddlmZ dd	lmZ ddlZdd
lmZmZ dZ ej        dd          Z G d de          ZdS )z1Tests for the SamDb logging of password changes.
    N)MSG_DSDB_LOGDSDB_EVENT_NAME)ERR_NO_SUCH_OBJECT)SamDB)system_session)AuditLogTestBase)delete_force)Net)securitylsaauditlogtestuser    c                   r     e Zd Z fdZd Z fdZd ZddZd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Z xZS )AuditLogDsdbTestsc                 (   t           | _        t          | _        t	          t
          |                                            t          j        d         | _	        dt          j        d         z  }t          |t                      |                                 |                                           | _        t          j        d         | _        | j                                        | _        | j                                        }| j                            d           |                     | j        j        |           | j                                        }| j                            d           | j                                        | _        |                     | j        j        |           t/          | j        dt0          z   dz   | j        z              | j                            dt0          z   dz   | j        z   d	t0          t4          d
           d S )N	SERVER_IPz	ldap://%sSERVER)urlsession_infocredentialslp	0000000010cn=
,cn=users,user)dnobjectclasssAMAccountNameuserPassword)r   message_typer   
event_typesuperr   setUposenviron	server_ipr   r   get_credentialsget_loadparmldbserver	domain_dnbase_dnget_dsheuristicsset_dsheuristics
addCleanupget_minPwdAgeset_minPwdAger	   	USER_NAMEadd	USER_PASS)selfhostdsheuristics	minPwdAge	__class__s       </usr/lib/python3/dist-packages/samba/tests/audit_log_dsdb.pyr$   zAuditLogDsdbTests.setUp(   s   ()&&,,...K0RZ11T&4&6&6%)%9%9%;%; --//1 1 1 j* x))++ x0022 	!!+... 	1<@@@ H**,,	 	s###x))++ 	.	::: 	TXuy0<?$,NOOO)#l2T\A!'%	
 
 	 	 	 	 	    c                 \    |                      d|           |                                  d S )N   r   )waitForMessagesdiscardMessages)r6   r   s     r;   discardSetupMessagesz&AuditLogDsdbTests.discardSetupMessagesY   s3    Q2&&&r<   c                 ~    |                                   t          t          |                                            d S N)rA   r#   r   tearDown)r6   r:   s    r;   rE   zAuditLogDsdbTests.tearDown]   s8    &&//11111r<   c                 b    | j         d         !| j         d         d         }|d         |k    rdS dS )N
txnMessagedsdbTransactiontransactionIdTF)context)r6   expectedtxns      r;   haveExpectedTxnz!AuditLogDsdbTests.haveExpectedTxna   s;    <%1,|,->?C?#x//tur<   Nc                 ,   || _         t          j                    }|                     |          sR| j                            d           t          j                    |z
  dk    r	d| _         dS |                     |          Rd| _         | j        d         S )zWait for a transaction message to arrive
        The connection is passed through to keep the connection alive
        until all the logging messages have been received.
        g?   N rG   )
connectiontimerM   msg_ctx	loop_oncerJ   )r6   rK   rQ   
start_times       r;   waitForTransactionz$AuditLogDsdbTests.waitForTransactionh   s     %Y[[
&&x00 	L""3'''y{{Z'!++"&r	 &&x00 	 |L))r<   c                 D   dt           z   dz   | j        z   }|                     |           |                     |                                           }|                                 }t          ||| j                  }d}|                    |t           t                     | 
                    d||          }t          d	t          |          z             |                     dt          |          d
           |d         d         }|                     d|d                    |                     |d                    |                     |                                |d                                                    |                     |d         | j                   |                                 }|                     ||d                    |                     |                     |d                              |d         }	|                     dt          |	                     |	d         d         }
|                     dt          |
                     |                     |
d         d                    |                     d|
d         d                    d S )NCN=
,CN=Users,templater+   newPassword!!42)newpasswordusernameoldpasswordrO   r?   Received %d messages/Did not receive the expected number of messagesr   
dsdbChangeModify	operationperformedAsSystemr   remoteAddress	sessionIdrI   
attributesclearTextPasswordactionsredactedreplaceaction)r3   r-   rB   insta_credsr(   r)   r
   r+   change_passwordr5   r@   printlenassertEqualassertFalse
assertTruelowerassertRegexpMatchesrg   get_sessionis_guid)r6   r   credsr   netpasswordmessagesaudit
session_idri   rk   s              r;   test_net_change_passwordz*AuditLogDsdbTests.test_net_change_passwordz   sw   Y-<!!"%%%  $*>*>*@*@ AA  %DK000$%.(1 	 	3 	3 	3 ''32'66$s8}}4555h--K	M 	M 	M L)5#566623444

E$K$5$5$7$7888  !7!%!3	5 	5 	5%%''
U;%7888
 	U?%;<<===<(
C
OO,,,01)<CLL)))
:.///GAJx$899999r<   c                    dt           z   dz   | j        z   }|                     |           |                     |                                           }|                                 }t          ||| j                  }d}|                    d          }|	                    |t           |           | 
                    d||	          }t          d
t          |          z             |                     dt          |          d           |d         d         }|                     d|d                    |                     |d                    |                     ||d                    |                     |d         | j                   |                                 }	|                     |	|d                    |                     |                     |d                              |d         }
|                     dt          |
                     |
d         d         }|                     dt          |                     |                     |d         d                    |                     d|d         d                    d S )NrX   rY   rZ   r\   r]   	workgroup)r^   account_namedomain_namerO   r?   ra   rb   r   rc   rd   re   rf   r   rg   rh   rI   ri   rj   rk   rl   rm   rn   )r3   r-   rB   ro   r(   r)   r
   r+   getset_passwordr@   rq   rr   rs   rt   rw   rg   rx   ru   ry   )r6   r   rz   r   r{   r|   domainr}   r~   r   ri   rk   s               r;   test_net_set_passwordz'AuditLogDsdbTests.test_net_set_password   sv   Y-<!!"%%%  $*>*>*@*@ AA  %DK000$$$X&/%+ 	 	- 	- 	- ''32'66$s8}}4555h--K	M 	M 	M L)5#566623444U4[)))  !7!%!3	5 	5 	5%%''
U;%7888
 	U?%;<<===<(
C
OO,,,01)<CLL)))
:.///GAJx$899999r<   c                    dt           z   dz   | j        z   }|                     |           t          j        dd          }dt           z   dz   | j        z   }| j                            d|z   dz   dz   dz   dz   t          z   dz   d	z   dz   |z   dz              |                     d
          }t          dt          |          z             |                     d
t          |          d           |d         d         }|                     d|d                    |                     |d                    |                     ||d                    |                     |d         | j                   |                     |                     |d                              |                                 }|                     ||d                    |                                 }|                     |d           |d         }|                     d
t          |                     |d         d         }|                     dt          |                     |                     |d         d                    |                     d|d         d                    |                     |d
         d                    |                     d|d
         d                    d S )Nr   r   r   dn: 
changetype: modify
zdelete: userPassword
userPassword: zadd: userPassword
rO   ra   rb   r   rc   rd   re   rf   r   rg   rh   LDAPri   r    rk   r>   rl   deletern   r4   )r3   r-   rB   sambagenerate_random_passwordr*   modify_ldifr5   r@   rq   rr   rs   rt   rw   rg   ru   ry   rx   get_service_description	r6   r   new_passwordr}   r~   r   service_descriptionri   rk   s	            r;   test_ldap_change_passwordz+AuditLogDsdbTests.test_ldap_change_password   s   Y-<!!"%%%5b"==Y-<RK$"#$%   )) ,00 "	"
 
  ,,
 /33	4 	4 	4 ''**$s8}}4555h--K	M 	M 	M L)5#566623444U4[)))  !7!%!3	5 	5 	5U;%788999%%''
U;%7888"::<<,f555<(
C
OO,,,^,Y7CLL)))
:.///71:h#7888
:.///
8 455555r<   c                    dt           z   dz   | j        z   }|                     |           t          j        dd          }| j                            d|z   dz   dz   dz   dz   |z   dz              |                     d	|
          }t          dt          |          z             | 
                    d	t          |          d           |d         d         }| 
                    d|d                    |                     |d                    |                     |                                |d                                                    |                     |d         | j                   |                     |                     |d                              |                                 }| 
                    ||d                    |                                 }| 
                    |d           |                     |                     |d                              |d         }| 
                    d	t          |                     |d         d         }| 
                    d	t          |                     |                     |d         d                    | 
                    d|d         d                    d S )Nr   r   r   r   r   r   zreplace: userPassword
r   rO   r?   ra   rb   r   rc   rd   re   rf   r   rg   rh   r   rI   ri   r    rk   rl   rm   rn   )r3   r-   rB   r   r   r*   r   r@   rq   rr   rs   rt   ru   rv   rw   rg   ry   rx   r   r   s	            r;   test_ldap_replace_passwordz,AuditLogDsdbTests.test_ldap_replace_password   s   Y-<!!"%%%5b"==RK$"#%&   ,, /33	4 	4 	4 ''b'11$s8}}4555h--K	M 	M 	M L)5#566623444

E$K$5$5$7$7888  !7!%!3	5 	5 	5U;%788999%%''
U;%7888"::<<,f555U?%;<<===<(
C
OO,,,^,Y7CLL)))
:.///GAJx$899999r<   c                 \   dt           z   dz   | j        z   }|                     d|          }t          dt	          |          z             |                     dt	          |          d           |d         d         }|                     d	|d
                    |                     |d                    |                     ||d                    |                     |d         | j                   | 	                                }|                     ||d                    | 
                                }|                     |d           |                     |                     |d                              |                     |                     |d                              |d         }|                     dt	          |                     |d         d         }|                     dt	          |                     |                     d|d         d                    |                     dt	          |d         d                              |                     d|d         d         d         d                    |d         d         }|                     dt	          |                     |                     d|d         d                    |                     dt	          |d         d                              |                     t           |d         d         d         d                    |d         d         }|                     dt	          |                     |                     d|d         d                    |                     |d         d                    d S )Nr   r   r>   r?   ra   rb   rO   rc   Addre   rf   r   rg   rh   r   rI   ri      r   rk   r4   r   rn   valuesr   valuer   r    rl   )r3   r-   r@   rq   rr   rs   rt   rw   rg   rx   r   ru   ry   )r6   r   r}   r~   r   r   ri   rk   s           r;   test_ldap_add_userz$AuditLogDsdbTests.test_ldap_add_user  sZ    Y-<''b'11$s8}}4555h--K	M 	M 	M L)k 233323444U4[)))  !7!%!3	5 	5 	5%%''
U;%7888"::<<,f555U;%788999U?%;<<===<(
C
OO,,,]+I6CLL)))
8 4555C
8 455666H!5a!8!ABBB-.y9CLL)))
8 4555C
8 455666GAJx$8$;G$DEEE^,Y7CLL)))
8 4555
:./////r<   c                 4   dt           z   dz   | j        z   }|                     |           | j                            t                      |                     d|          }t          dt          |          z             |                     dt          |          d           |d         d         }|                     d	|d
                    | 	                    |d                    | 
                    |                                |d                                                    |                     |d         | j                   | 
                    |                     |d                              |                     d|d                    |                     d|d                    |                                 }|                     ||d                    |                                 }|                     |d           |d         }|                     |          }|d         }|                     d|d                    | 
                    |                     |d                              | 
                    |d         dk               d S )Nr   r   rO   r?   ra   rb   r   rc   Deletere   rf   r   rg   rh   
statusCodeSuccessstatusr   rI   rH   commitrn   duration)r3   r-   rB   r*   
deleteuserr@   rq   rr   rs   rt   ru   rv   rw   rg   ry   rx   r   rV   )r6   r   r}   r~   r   r   rI   messages           r;   test_samdb_delete_userz(AuditLogDsdbTests.test_samdb_delete_userI  sg   Y-<!!"%%%I&&&''b'11$s8}}4555h--K	M 	M 	M L)5#566623444

E$K$5$5$7$7888  !7!%!3	5 	5 	5U;%788999E,/000E(O444%%''
U;%7888"::<<,f555o.))-88)*5?333U?%;<<===j)A-.....r<   c                    d}dt           z   dz   | j        z   }|                     |           d|z   dz   | j        z   }	 | j                            |           |                     d           n# t          $ r Y nw xY w|                     d          }t          dt          |          z             | 
                    dt          |          d           |d         d	         }| 
                    d
|d                    |                     |d                    |                     |                                |d                                                    |                     |d         | j                   | 
                    t           |d                    | 
                    d|d                    |                     |                     |d                              |                                 }| 
                    ||d                    |                                 }| 
                    |d           |d         }|                     |          }|d         }| 
                    d|d                    |                     |                     |d                              |                     |d         dk               d S )NdoesNotExistr   r   zException not thrownrO   ra   rb   r   rc   r   re   rf   r   rg   r   zNo such objectr   rh   r   rI   rH   rollbackrn   r   )r3   r-   rB   r*   r   fail	Exceptionr@   rq   rr   rs   rt   ru   rv   rw   rg   r   ry   rx   r   rV   )	r6   DOES_NOT_EXISTr   r}   r~   r   r   rI   r   s	            r;   !test_samdb_delete_non_existent_dnz3AuditLogDsdbTests.test_samdb_delete_non_existent_dnk  s   'Y-<!!"%%%^#l2T\A	HOOBII,---- 	 	 	D	 ''**$s8}}4555h--K	M 	M 	M L)5#566623444

E$K$5$5$7$7888  !7!%!3	5 	5 	5+U<-@AAA)5?;;;U;%788999%%''
U;%7888"::<<,f555o.))-88)*U8_555U?%;<<===j)A-.....s   /A. .
A;:A;c                 
   d| j         z   }|                     |           |                     |                                           }t	          j        d| j        z  |                                 |          }|                    dt	          j	                    t          j                  }t	          j                    }d|_        |                    ||t          j                   |                     d|	          }t!          d
t#          |          z             |                     dt#          |          d           |d         d         }|                     d|d                    |                     |d                    |                     |                                |d                                                    |                     |d         | j                   |                     |                     |d                              |                                 }|                     ||d                    |d         }	|                     dt#          |	                     |	d         }
|                     dt#          |
d                              |
d         d         }|                     d|d                    |d         }|                     dt#          |                     |                     d|d         d                    |	d         }|                     dt#          |d                              |d         d         }|                     d|d                    |d         }|                     dt#          |                     |                     d|d         d                    |                                  |                    ||t          j                  }|                    |           |                     d|	          }t!          d
t#          |          z             |                     dt#          |          d           d| j         z   }|d         d         }|                     d|d                    |                     |d                    |                     |                                |d                                                    |                     |d         | j                   |                     |                     |d                              |                                 }|                     ||d                    d S ) Nzcn=Test Secret,CN=System,rZ   zncacn_np:%s\)system_nameattraccess_maskzG$Test)handlenamer   rO   r?   ra   rb   r   rc   r   re   rf   r   rg   rh   ri   r>   objectClassrk   r4   rn   r   secretr   cnzTest Secretr   )r-   rB   ro   r(   r   lsarpcr+   r)   OpenPolicy2ObjectAttributer   SEC_FLAG_MAXIMUM_ALLOWEDStringstringCreateSecretr@   rq   rr   rs   ru   rv   rw   rg   ry   rx   rA   
OpenSecretDeleteObject)r6   r   rz   lsa_conn
lsa_handlesecret_namer}   r~   r   ri   object_classrn   r   r   hs                  r;   &test_create_and_delete_secret_over_lsaz8AuditLogDsdbTests.test_create_and_delete_secret_over_lsa  s   (4<7!!"%%%  $*>*>*@*@ AA:DK'  ))$&& 9 * ; ;
 jll% 9 	 	; 	; 	;
 ''b'11$s8}}4555h--K	M 	M 	M L)k 233312333

E$K$5$5$7$7888  !7!%!3	5 	5 	5U;%788999%%''
U;%7888 <(
C
OO,,,!-0CY 788999i(+x 0111!CKK(((6!9W#5666C9..///Iq!x 0111!CKK(((q	'(:;;; 	 9   ; ;
 	a   ''b'11$s8}}4555h--K	M 	M 	M )4<7L)5#566612333

E$K$5$5$7$7888  !7!%!3	5 	5 	5U;%788999%%''
U;%788888r<   c                    dt           z   dz   | j        z   }|                     |           | j                            d|z   dz   dz   dz   dz              |                     d|	          }t          d
t          |          z             |                     dt          |          d           |d         d         }|                     d|d                    | 	                    |d                    |                     ||d                    | 
                    |d         | j                   |                     |                     |d                              |                                 }|                     ||d                    |                                 }|                     |d           |d         }|                     dt          |                     |d         d         }|                     dt          |                     |                     d|d         d                    |d         d         }|                     dt          |                     |                     d|d         d                    |                                  | j                            d|z   dz   dz   dz   dz              |                     d|	          }t          d
t          |          z             |                     dt          |          d           |d         d         d         }|                     dt          |                     |d         d         }|                     dt          |                     |                     d|d         d                    |d         d         }|                     dt          |                     |                     d|d         d                    |                                  | j                            d|z   dz   dz   dz   dz   d z              |                     d|	          }t          d
t          |          z             |                     dt          |          d           |d         d         d         }|                     dt          |                     |d         d         }|                     dt          |                     |                     d|d         d                    |d         d         }|                     d!t          |                     |                     d"|d         d                    |                     d#|d         d                    |                                  | j                            d|z   dz   d$z   d%z   dz   d z              |                     d|	          }t          d
t          |          z             |                     dt          |          d           |d         d         d         }|                     dt          |                     |d         d         }|                     dt          |                     |                     d&|d         d                    |d         d         }|                     d!t          |                     |                     d"|d         d                    |                     d#|d         d                    |                                  | j                            d|z   dz   d$z   d'z   d(z   d)z              |                     d|	          }t          d
t          |          z             |                     dt          |          d           |d         d         d         }|                     dt          |                     |d         d         }|                     dt          |                     |                     d*|d         d                    |d         d         }|                     d!t          |                     |                     d+|d         d                    |                     d,|d         d                    d S )-Nr   r   r   r   r   zadd: carLicense
zcarLicense: license-01
rO   r?   ra   rb   r   rc   rd   re   rf   r   rg   rh   r   ri   
carLicenserk   r4   rn   r   z
license-01r   zcarLicense: license-02
z
license-02zcarLicense: license-03
zcarLicense: license-04
r>   z
license-03z
license-04zchangetype: delete
zdelete: carLicense
r   zreplace: carLicense
zcarLicense: license-05
zcarLicense: license-06
rm   z
license-05z
license-06)r3   r-   rB   r*   r   r@   rq   rr   rs   rt   rw   rg   ru   ry   rx   r   rA   )	r6   r   r}   r~   r   r   ri   rk   r   s	            r;   test_modifyzAuditLogDsdbTests.test_modify  s   Y-<!!"%%%
 	RK$"#  ''	( 	( 	( ''b'11$s8}}4555h--K	M 	M 	M L)5#566623444U4[)))  !7!%!3	5 	5 	5U;%788999%%''
U;%7888"::<<,f555<(
C
OO,,,\*95CLL)))
8 4555H%CKK(((vay'9:::
 	RK$"#  ''	( 	( 	( ''b'11$s8}}4555h--K	M 	M 	M a[.|<
C
OO,,,\*95CLL)))
8 4555H%CKK(((vay'9:::
 	RK$"#  '' '	'	( 	( 	( ''b'11$s8}}4555h--K	M 	M 	M a[.|<
C
OO,,,\*95CLL)))
8 4555H%CKK(((vay'9:::vay'9:::
 	RK$"#"# '' '	'	( 	( 	( ''b'11$s8}}4555h--K	M 	M 	M a[.|<
C
OO,,,\*95CLL)))71:h#7888H%CKK(((vay'9:::vay'9:::
 	RK$"##$ '' '	'	( 	( 	( ''b'11$s8}}4555h--K	M 	M 	M a[.|<
C
OO,,,\*95CLL)))GAJx$8999H%CKK(((vay'9:::vay'9:::::r<   rD   )__name__
__module____qualname__r$   rB   rE   rM   rV   r   r   r   r   r   r   r   r   r   __classcell__)r:   s   @r;   r   r   &   s       , , , , ,b  2 2 2 2 2  * * * *$(: (: (:T': ': ':R(6 (6 (6T$: $: $:L*0 *0 *0X /  /  /D&/ &/ &/PT9 T9 T9tM; M; M; M; M; M; M;r<   r   )__doc__samba.testsr   samba.dcerpc.messagingr   r   r*   r   samba.samdbr   
samba.authr   r%   rR   samba.tests.audit_log_baser   r	   	samba.netr
   samba.dcerpcr   r   r3   r   r5   r    r<   r;   <module>r      s,  $      @ @ @ @ @ @ @ @ " " " " " "       % % % % % % 				  7 7 7 7 7 7 $ $ $ $ $ $        & & & & & & & &	*E*2r22	T	; T	; T	; T	; T	;( T	; T	; T	; T	; T	;r<   