
    gr                     ~   S r SSKJr  SSKJr  SSKrSSKrSSKJrJ	r	  SSK
Jr  SSKJr  SSKJr  SS	KJrJrJrJr  SS
KJr  SSKJr  SSKJr  \" \5      rSS jr\R:                  R=                  S5      =(       d    SrSS jr S r!S r"\"" 5       u  r#r$\RJ                  " \#S5      r& " S S\5      r' " S S\5      r(g)z@tests for passlib.apache -- (c) Assurance Technologies 2008-2011    )with_statement)	getLoggerN)apacheregistry)MissingBackendError)irange)unittest)TestCaseget_fileset_fileensure_mtime_changed)u)to_bytes)to_unicode_for_identifyc                     [         R                  R                  U 5      n[         R                  R                  U 5      U-
  n[         R                  " XU45        g)z)backdate file's mtime by specified amountN)ospathgetatimegetmtimeutime)r   offsetatimemtimes       R/home/matz/Project1/venv/lib/python3.13/site-packages/passlib/tests/test_apache.pybackdate_file_mtimer      sA     GGT"EGGT"6)EHHT5>"    PASSLIB_TEST_HTPASSWD_PATHhtpasswdc                 B   Ub  UR                  S5      n[        R                  " [        /U -   [        R                  [        R
                  U(       a  [        R                  OSS9nUR                  U5      u  p4UR                  5       n[        U=(       d    S5      nX54$ )z
helper to run htpasswd cmd
Nutf-8)stdoutstderrstdin )	encode
subprocessPopenhtpasswd_pathPIPESTDOUTcommunicatewaitr   )argsr#   procouterrrcs         r   _call_htpasswdr2   +   s~     W%]Od2:??#-#4#4uJOOZ^`D&HC	B
!#)
,C7Nr   c                 0    [        SX/U5      u  p4U(       + $ )z
wrapper for htpasswd verify
z-vi)r2   )r   userpasswordr/   r1   s        r   _call_htpasswd_verifyr6   9   s     eT0(;GC6Mr   c                       [        / 5      u  pU(       d  [        R                  S5        SU ;   nSU4$ ! [         a     gf = f)z(
helper to check if htpasswd is present
)FFz htpasswd test returned with rc=0z -B T)r2   OSErrorlogwarning)r/   r1   have_bcrypts      r   _detect_htpasswdr<   A   sO     $ 67C-K   s   4 
A Az requires `htpasswd` cmdline toolc                      \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r\S 5       r \\!RD                  " \#RH                  " S5      S5      S  5       5       r%S!r&g")#HtpasswdFileTestZ   ztest HtpasswdFile classHtpasswdFilest   user2:2CHkkwa2AtqGs
user3:{SHA}3ipNV1GrBtxPmHFC21fCbVCSXIo=
user4:pass4
user1:$apr1$t4tc7jTh$GPIWVUo8sQKJlUdV8V5vu0
s4   user3:{SHA}3ipNV1GrBtxPmHFC21fCbVCSXIo=
user4:pass4
sy   user2:pass2x
user3:{SHA}3ipNV1GrBtxPmHFC21fCbVCSXIo=
user4:pass4
user1:$apr1$t4tc7jTh$GPIWVUo8sQKJlUdV8V5vu0
user5:pass5
s   useræ:2CHkkwa2AtqGs
s   user:2CHkkwa2AtqGs
s   user1:pass1
user1:pass2
s  user2:2CHkkwa2AtqGs
user3:{SHA}3ipNV1GrBtxPmHFC21fCbVCSXIo=
user4:pass4
user1:$apr1$t4tc7jTh$GPIWVUo8sQKJlUdV8V5vu0
user5:$2a$12$yktDxraxijBZ360orOyCOePFGhuis/umyPNJoL5EbsLk.s6SWdrRO
user6:$5$rounds=110000$cCRp/xUUGVgwR4aP$p0.QKFS5qLNRqw1/47lXYiAcgIjJK.WjCO8nrEKuUK.
c                 @   U R                  5       n[        XR                  5        [        R                  " U5      nU R                  UR                  5       U R                  5        U R                  UR                  U5        U R                  UR                  5        US-   Ul        U R                  UR                  US-   5        U R                  UR                  5        [        R                  " USS9nU R                  UR                  5       S5        U R                  UR                  U5        U R                  UR                  5        U R                  S5         [        R                  " USS9nSSS5        U R                  UR                  5       S5        U R                  UR                  U5        U R                  UR                  5        [        R                  " U5        U R                  [        [        R                  U5        g! , (       d  f       N= f)	test constructor autoloadxTnewr   z ``autoload=False`` is deprecatedF)autoloadN)mktempr   	sample_01r   r@   assertEqual	to_stringr   
assertTruer   assertFalseassertWarningListr   removeassertRaisesIOErrorselfr   hts      r   test_00_constructor_autoload-HtpasswdFileTest.test_00_constructor_autoload}   s    {{}~~&  &8$'! *$*-"   40-$'" ##$FG$$TE:B H-$'" 			$'6#6#6= HGs   H
Hc                 N   U R                  5       n[        XR                  5        [        R                  R                  U5      nU R                  UR                  5       U R                  5        U R                  UR                  S 5        U R                  UR                  5        g N)rG   r   rH   r   r@   	from_pathrI   rJ   r   rL   r   rQ   s      r   test_00_from_path"HtpasswdFileTest.test_00_from_path   so    {{}~~&  **408$'"r   c                    [         R                  R                  U R                  5      nU R	                  UR                  S5      5        U R	                  UR                  S5      5        U R                  UR                  S5      5        U R                  UR                  5       U R                  5        U R                  [        UR
                  S5        g)test delete()user1user2user5user:N)r   r@   from_stringrH   rK   deleterL   rI   rJ   	sample_02rO   
ValueErrorrR   rS   s     r   test_01_deleteHtpasswdFileTest.test_01_delete   s      ,,T^^<		'*+		'*+7+,8 	*bii9r   c                 D   U R                  5       nSn[        X5        [        R                  " U5      nUR	                  S5        U R                  [        U5      U5        [        R                  " USS9nUR	                  S5        U R                  [        U5      S5        g )Ns   user1:pass1
user2:pass2
r]   T)autosaves   user2:pass2
)rG   r   r   r@   rb   rI   r   rR   r   samplerS   s       r   test_01_delete_autosave(HtpasswdFileTest.test_01_delete_autosave   s}    {{}.  &
		'$0  5
		'$)9:r   c                    [         R                  R                  U R                  SS9nU R	                  UR                  SS5      5        U R                  UR                  SS5      5        U R                  UR                  5       U R                  5        U R                  S5         [         R                  R                  U R                  SS9nS	S	S	5        U R	                  UR                  SS5      5        U R                  UR                  SS5      5        U R                  UR                  5       U R                  5        U R                  [        UR
                  S
S5        U R                  S5         UR                  SS5        S	S	S	5        U R	                  UR                  SS5      5        g	! , (       d  f       N= f! , (       d  f       NA= f)ztest set_password()	plaintextdefault_schemer^   pass2xr_   pass5z``default`` is deprecated)defaultNr`   passupdate\(\) is deprecatedtest)r   r@   ra   rH   rK   set_passwordrL   rI   rJ   	sample_03rM   rO   rd   updatecheck_passwordre   s     r   test_02_set_password%HtpasswdFileTest.test_02_set_password   s\     ,,NN; - 8:;':;8 ##$?@$$000UB A:;':;8 	*boowG ##$>?IIgv& @))'6:; A@ @?s   &)F36G3
G
Gc                 J   U R                  5       nSn[        X5        [        R                  " U5      nUR	                  SS5        U R                  [        U5      U5        [        R                  " USSS9nUR	                  SS5        U R                  [        U5      S5        g )N   user1:pass1
r]   pass2ro   T)rq   ri   s   user1:pass2
)rG   r   r   r@   rx   rI   r   rj   s       r   test_02_set_password_autosave.HtpasswdFileTest.test_02_set_password_autosave   s    {{}!  &
)$0  kDQ
)$)9:r   c                    S nU R                  U" S5      S5        U R                  U" S5      S5        U R                  [        US5        U R                  U" S5      [        R                  S   5        U R                  U" S5      [        R                  S   5        U R                  U" S5      [        R                  S   5        U R                  U" S5      [        R                  S   5        g)	z%test set_password() -- default_schemec                     [         R                  " U S9nUR                  SS5        UR                  R	                  UR                  S5      5      $ )Nrp   r]   pass1)r   r@   rx   contextidentifyget_hash)schemerS   s     r   checkCHtpasswdFileTest.test_02_set_password_default_scheme.<locals>.check   s>    $$F;BOOGW-::&&r{{7';<<r   sha256_crypt	des_cryptxxxportableportable_apache_22host_apache_22N)rI   rO   KeyErrorr   htpasswd_defaults)rR   r   s     r   #test_02_set_password_default_scheme4HtpasswdFileTest.test_02_set_password_default_scheme   s    	= 	~.?{+[9 	(E51 	z*F,D,DZ,PQ34f6N6NOc6de/0&2J2JK[2\] 	tf&>&>?S&TUr   c                    [         R                  R                  U R                  5      nUR	                  SS5        UR                  S5        UR	                  SS5        U R                  [        UR                  5       5      / SQ5        g)test users()r_   rs   user3pass3r]   r^   r   user4r_   N)	r   r@   ra   rH   rx   rb   rI   sortedusersre   s     r   test_03_usersHtpasswdFileTest.test_03_users   s`      ,,T^^<
)
		'
)
+-Z[r   c                    [         R                  R                  U R                  5      nU R	                  [
        UR                  SS5        U R                  UR                  SS5      SL 5        [        SS5       H\  n[        U5      n U R                  UR                  SU-   SU-   5      5        U R                  UR                  SU-   S5      SL 5        M^     U R	                  [        UR                  S
S5        U R                  S/S-  5         U R                  UR                  SS5      5        U R                  UR                  SS5      5        SSS5        g! [         a    US	:X  a   M  e f = f! , (       d  f       g= f)test check_password()   pass9user9N   r4   ru   F5r`   verify\(\) is deprecated   r]   r   r   )r   r@   ra   	sample_05rO   	TypeErrorr{   rK   r   strr   rd   rM   verifyrL   rR   rS   is      r   test_04_check_password'HtpasswdFileTest.test_04_check_password  sM     ,,T^^<)R%6%67C))'':dBC 1AAA 1 1&(F1H EF 1 1&(G D MN	  	*b&7&7&I ##%?$@$BCOOBIIgw78RYYw89 DC ' 8	 DCs    
AEAE6E31E36
Fc                    U R                  5       n[        US5        [        US5        [        R                  " USS9nU R                  UR                  5       S5        UR                  SS5        UR                  5         U R                  UR                  5       S5        [        XR                  5        UR                  5         U R                  UR                  5       U R                  5        UR                  S	S
5        UR                  5         U R                  UR                  5       U R                  5        [        R                  " 5       nU R                  [        UR                  5        U R                  [        UR                  5        [        XR                  5        [        R                  " 5       nUR                  U5        U R                  UR                  SS5      5        g)test load()r$      ro   rp   r   r]   r   r   r_   rs   N)rG   r   r   r   r@   rI   rJ   rx   load_if_changedrH   loadrO   RuntimeError
sample_duprK   r{   rR   r   hahbhcs        r   test_05_loadHtpasswdFileTest.test_05_load  s_    {{}rD!$  kB- 	)
)9: 	~~&
8 	)
	8   ",0,(:(:; 	'  "
))'':;r   c                    U R                  5       n[        XR                  5        [        R                  " U5      nUR                  S5        UR                  S5        UR                  5         U R                  [        U5      U R                  5        [        R                  " SS9nUR                  SS5        U R                  [        UR                  5        UR                  U5        U R                  [        U5      S5        g)test save()r]   r^   ro   rp   r   r   N)rG   r   rH   r   r@   rb   saverI   r   rc   rx   rO   r   rR   r   rS   r   s       r   test_06_saveHtpasswdFileTest.test_06_saveA  s     {{}~~&  & 			'
		'
	$8   <
),0 	$)9:r   c                 ~   U R                  [        [        R                  SS9  [        R                  R	                  U R
                  SSS9nU R                  UR                  5       [        S5      /5        U R                  S5         [        R                  R	                  U R
                  SS9nSSS5        U R                  UR                  5       S	/5        [        R                  R	                  U R                  S
SS9nU R                  UR                  5       [        S5      /5        g! , (       d  f       N= f)ztest 'encoding' kwdutf-16encodingr    Tr   return_unicode   useræz``encoding=None`` is deprecatedNs   userælatin-1)rO   rd   r   r@   ra   sample_04_utf8rI   r   r   rM   sample_04_latin1re   s     r   test_07_encodings"HtpasswdFileTest.test_07_encodingsW  s    	*f&9&9HM   ,,T-@-@7<@ - Bq%89 ##$EF$$001D1Dt0TB G%89   ,,T-B-B7@QU - Wq%89 GFs   )D..
D<c                    [         R                  R                  U R                  5      nU R	                  UR                  S5      S5        U R	                  UR                  S5      S5        U R	                  UR                  S5      S5        U R                  S5         U R	                  UR                  S5      S5        SSS5        g! , (       d  f       g= f)test get_hash()r   s!   {SHA}3ipNV1GrBtxPmHFC21fCbVCSXIo=r   s   pass4r_   Nfind\(\) is deprecated)r   r@   ra   rH   rI   r   rM   findre   s     r   test_08_get_hash!HtpasswdFileTest.test_08_get_hashk  s      ,,T^^<W-/STW-x8W-t4##$<=RWWW-x8 >==s   "C		
Cc                    [         R                  R                  U R                  5      nU R	                  UR                  5       U R                  5        [         R                  " 5       nU R	                  UR                  5       S5        g)ztest to_stringr   N)r   r@   ra   rH   rI   rJ   re   s     r   test_09_to_string"HtpasswdFileTest.test_09_to_stringu  ^       ,,T^^<8   "-r   c                 H    [         R                  " SSSSS9n[        U5        g )NfakepathTr   )ri   rE   r   )r   r@   reprre   s     r   test_10_reprHtpasswdFileTest.test_10_repr  s      dyYRr   c                     U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        g )Ns   realm:user1:pass1
s   pass1
)rO   rd   r   r@   ra   rR   s    r   test_11_malformed"HtpasswdFileTest.test_11_malformed  sD    *f&9&9&E&E"	$*f&9&9&E&E	r   c                 `    U R                  [        [        R                  R                  SS S9  g )Nr   )r   )rO   r   r   r@   ra   r   s    r   test_12_from_string$HtpasswdFileTest.test_12_from_string  s*    )V%8%8%D%DD 	 	*r   c                 p   [        S5      n[        R                  R                  U5      nU R	                  [        UR                  5       5      / SQ5        UR                  SS5        U R	                  [        UR                  5       5      / SQ5        UR                  SS5        U R	                  [        UR                  5       5      / SQ5        UR                  S5        U R	                  [        UR                  5       5      / S	Q5        [        S
5      nU R	                  UR                  5       U5        g)zwhitespace & comment handlingz`
user2:pass2
user4:pass4
user7:pass7
 	 
user1:pass1
 # legacy users
#user6:pass6
user5:pass5

)r]   r^   r   r_   user7r   althash4user6althash6)r]   r^   r   r_   r   r   r   )r]   r^   r   r_   r   zd
user2:pass2
user4:althash4
 	 
user1:pass1
 # legacy users
#user6:pass6
user5:pass5
user6:althash6
N)
r   r   r@   ra   rI   r   r   set_hashrb   rJ   )rR   sourcerS   targets       r   test_13_whitespace#HtpasswdFileTest.test_13_whitespace  s    
 

   ,,V4
+-Z[ 	GZ(
+-Z[ 	GZ(
+-cd 			'
+-Z[ 

 	0r   c                 
  ^ U R                  5       n[        R                  " USS9mU4S jnTR                  SU" SS5      5        [        R                  S   nTR                  SU" SU5      5        [        R                  S	   nTR                  S
U" SU5      5        TR                  SS5        TR                  5         U R                  [        USS5      5        U R                  [        USS5      5        U R                  [        US
S5      5        U R                  [        USS5      5        U R                  [        USS5      5        U R                  [        USS5      5        U R                  [        US
S5      5        g)z+
verify "htpasswd" command can read output
Tr   rE   c                 X   > TR                   R                  U5      R                  U 5      $ rW   r   handlerhashpwdr   rS   s     r   hash_scheme>HtpasswdFileTest.test_htpasswd_cmd_verify.<locals>.hash_scheme  #    ::%%f-22377r   r]   r5   apr_md5_cryptr   r^   hostr   r   z$xxx$foo$bar$bazwrongN)	rG   r   r@   r   r   r   rL   r6   rK   )rR   r   r   host_no_bcrypt	host_bestrS   s        @r   test_htpasswd_cmd_verify)HtpasswdFileTest.test_htpasswd_cmd_verify  sK   
 {{}  d5	8 	G[ODE  112BC
G[^DE ,,V4	
G[Y?@ 	G/0 		.tWgFG.tWgFG.tWgFG.tWgFG-dGZHI-dGZHI-dGZHIr   bcryptzbcrypt support requiredc                 n  ^ U R                  5       n[        R                  " USS9mU4S jnTR                  SU" SS5      5        TR	                  5         U R                  [        USS5      5        [        (       a  U R                  [        USS5      5        gU R                  [        USS5      5        g)	z
verify "htpasswd" command can read bcrypt format

this tests for regression of issue 95, where we output "$2b$" instead of "$2y$";
fixed in v1.7.2.
Tr   c                 X   > TR                   R                  U5      R                  U 5      $ rW   r   r   s     r   r   EHtpasswdFileTest.test_htpasswd_cmd_verify_bcrypt.<locals>.hash_scheme  r   r   r]   r5   r  r   N)	rG   r   r@   r   r   rL   r6   HAVE_HTPASSWD_BCRYPTrK   )rR   r   r   rS   s      @r   test_htpasswd_cmd_verify_bcrypt0HtpasswdFileTest.test_htpasswd_cmd_verify_bcrypt  s     {{}  d5	8
G[X>?
	.tWgFGOO1$LM 24*MNr    N)'__name__
__module____qualname____firstlineno____doc__descriptionPrefixrH   rc   ry   r   r   r   r   rT   rY   rf   rl   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   requires_htpasswd_cmdr   r	   
skipUnlessr   has_backendr  __static_attributes__r	  r   r   r>   r>   Z   s    !&BI JI"I 5N2.JFI>D#	:;<.;V.\:4!<J;,:(9	.*
-1^ "J "JH --h79RSO T Or   r>   c                   ~    \ rS rSrSrSrSrSrSrSr	Sr
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rSrg)HtdigestFileTesti   ztest HtdigestFile classHtdigestFiles   user2:realm:549d2a5f4659ab39a80dac99e159ab19
user3:realm:a500bb8c02f6a9170ae46af10c898744
user4:realm:ab7b5d5f28ccc7666315f508c7358519
user1:realm:2a6cf53e7d8f8cf39d946dc880b14128
sZ   user3:realm:a500bb8c02f6a9170ae46af10c898744
user4:realm:ab7b5d5f28ccc7666315f508c7358519
s   user2:realm:5ba6d8328943c23c64b50f8b29566059
user3:realm:a500bb8c02f6a9170ae46af10c898744
user4:realm:ab7b5d5f28ccc7666315f508c7358519
user1:realm:2a6cf53e7d8f8cf39d946dc880b14128
user5:realm:03c55fdc6bf71552356ad401bdb9af19
s0   useræ:realmæ:549d2a5f4659ab39a80dac99e159ab19
s.   user:realm:549d2a5f4659ab39a80dac99e159ab19
c                    U R                  5       n[        XR                  5        [        R                  " U5      nU R                  UR                  5       U R                  5        [        R                  " USS9nU R                  UR                  5       S5        [        R                  " U5        U R                  [        [        R                  U5        g)rB   TrD   r   N)rG   r   rH   r   r  rI   rJ   r   rN   rO   rP   rQ   s      r   rT   -HtdigestFileTest.test_00_constructor_autoload  s     {{}~~&  &8   40- 			$'6#6#6=r   c                 :   [         R                  R                  U R                  5      nU R	                  UR                  SS5      5        U R	                  UR                  SS5      5        U R                  UR                  SS5      5        U R                  UR                  SS5      5        U R                  UR                  5       U R                  5        U R                  [        UR
                  SS5        U R                  [        UR
                  SS	5        g
)r\   r]   realmr^   r_   r   realm5r`   r4   realm:N)r   r  ra   rH   rK   rb   rL   rI   rJ   rc   rO   rd   re   s     r   rf   HtdigestFileTest.test_01_delete+  s      ,,T^^<		'734		'7347G457H568 	*bii'B 	*biiBr   c                 $   U R                  5       n[        XR                  5        [        R                  " U5      nU R                  UR                  SS5      5        U R                  UR                  SS5      5        U R                  UR                  SS5      5        U R                  [        U5      U R                  5        SUl
        U R                  UR                  SS5      5        U R                  [        U5      U R                  5        g )Nr]   r  r   r  r_   Tr^   )rG   r   rH   r   r  rK   rb   rL   rI   r   ri   rc   rQ   s      r   rl   (HtdigestFileTest.test_01_delete_autosave:  s    {{}~~&  &		'7347H567G45$8		'734$8r   c                    [         R                  R                  U R                  5      nU R	                  UR                  SSS5      5        U R                  UR                  SSS5      5        U R                  UR                  5       U R                  5        U R                  [        UR
                  SS5        SUl        UR                  SS5        UR                  SSS5        U R                  [        UR
                  SSS	5        U R                  [        UR
                  S
SS	5        U R                  [        UR
                  SSS	5        U R                  [        UR
                  SSS	5        U R                  S5         UR!                  SSS5        SSS5        U R	                  UR                  SS5      5        g! , (       d  f       N0= f)ztest update()r^   r  rr   r_   rs   r   realm2r`   ru      uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuur4   r     rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrv   rw   N)r   r  ra   rH   rK   rx   rL   rI   rJ   ry   rO   r   default_realmr{   rd   rM   rz   re   s     r   r|   %HtdigestFileTest.test_02_set_passwordH  sb     ,,T^^<(CD'7CD8 	)R__gwG#
)
'8W5 	*boowP*boowP 	*boovxP*boovwO ##$>?IIgx0 @))'6:; @?s   G
Gc                 `   [         R                  R                  U R                  5      nUR	                  SSS5        UR                  SS5        UR	                  SSS5        U R                  [        UR                  S5      5      / SQ5        U R                  [        UR                  S5        g)	r   r_   r  rs   r   r   r   r   N)r   r  ra   rH   rx   rb   rI   r   r   rO   r   re   s     r   r   HtdigestFileTest.test_03_usersd  s      ,,T^^<
'2
		'7#
'2 124ab)RXXq1r   c           	         [         R                  R                  U R                  5      nU R	                  [
        UR                  SSS5        U R	                  [
        UR                  SSS5        U R                  UR                  SSS5      S5        [        SS5       H\  n[        U5      nU R                  UR                  SU-   SSU-   5      5        U R                  UR                  SU-   SS5      S	5        M^     U R	                  [
        UR                  SS5        SUl        U R                  UR                  S
S5      5        U R                  UR                  SS5      S5        U R                  S/S-  5         U R                  UR                  S
SS5      5        U R                  UR                  S
SS5      5        SSS5        U R	                  [        UR                  SSS5        g! , (       d  f       N2= f)r   r   r  rs   r4   r_   Nr   ru   Fr]   r   r   r   r   r`   )r   r  ra   rH   rO   r   r{   assertIsr   r   rK   r$  rM   r   rL   rd   r   s      r   r   'HtdigestFileTest.test_04_check_passwordn  s     ,,T^^<)R%6%67GL)R%6%67Kb''A4H!AAAOOB--fQhJKMM"++F1HgwGO  	)R%6%6I"))'7;<b''94@ ##%?$@$BCOOBIIgw@ARYYwAB D
 	*b&7&7'6R DCs    AG11
G?c                    U R                  5       n[        US5        [        US5        [        R                  " U5      nU R                  UR                  5       S5        UR                  SSS5        UR                  5         U R                  UR                  5       S5        [        XR                  5        UR                  5         U R                  UR                  5       U R                  5        UR                  SSS	5        UR                  5         U R                  UR                  5       U R                  5        [        R                  " 5       nU R                  [        UR                  5        U R                  [        UR                  5        [        R                  " 5       nUR                  U5        U R                  UR                  5       U R                  5        [        U5        [        US5        U R                  S
5         UR                  SS9  SSS5        U R                  UR                  5       S5        g! , (       d  f       N/= f)r   r$   r   r   r]   r  r   s-   user1:realm:2a6cf53e7d8f8cf39d946dc880b14128
r_   rs   z!load\(force=False\) is deprecatedF)forceN)rG   r   r   r   r  rI   rJ   rx   r   rH   r   rO   r   r   rM   r   s        r   r   HtdigestFileTest.test_05_load  s    {{}rD!$  &- 	'2
)Z[ 	~~&
8 	'2
	8   ",0,(:(:;   "
8 	T"r##$HIGG%G  J- JIs   I
Ic                 0   U R                  5       n[        XR                  5        [        R                  " U5      nUR                  SS5        UR                  SS5        UR                  5         U R                  [        U5      U R                  5        [        R                  " 5       nUR                  SSS5        U R                  [        UR                  5        UR                  U5        U R                  [        U5      UR                  5       5        g)r   r]   r  r^   r   N)rG   r   rH   r   r  rb   r   rI   r   rc   rx   rO   r   rJ   r   s       r   r   HtdigestFileTest.test_06_save  s     {{}~~&  & 			'7#
		'7#
	$8   "
'2,0 	$8r   c                    [         R                  R                  U R                  5      nU R	                  UR                  S5      S5        U R	                  UR                  5       S/5        U R	                  UR                  S5      S5        U R	                  UR                  5       / 5        U R	                  UR                  5       S5        g)ztest realms() & delete_realm()rC   r   r     r   N)r   r  ra   rH   rI   delete_realmrealmsrJ   re   s     r   test_07_realmsHtdigestFileTest.test_07_realms  s      ,,T^^<-q1wi0115b)-r   c                    [         R                  R                  U R                  5      nU R	                  UR                  SS5      S5        U R	                  UR                  SS5      S5        U R	                  UR                  SS5      S5        U R                  S5         U R	                  UR                  SS5      S5        SSS5        g! , (       d  f       g= f)	r   r   r   a500bb8c02f6a9170ae46af10c898744r    ab7b5d5f28ccc7666315f508c7358519r_   Nr   )r   r  ra   rH   rI   r   rM   r   re   s     r   r   !HtdigestFileTest.test_08_get_hash  s      ,,T^^<Wg68Z[Wg68Z[Wg6=##$<=RWWWg68Z[ >==s   !#C
Cc                 f   U R                  [        [        R                  SS9  [        R                  R	                  U R
                  SSS9nU R                  UR                  5       [        S5      /5        U R                  UR                  [        S5      5      [        S5      /5        [        R                  R	                  U R                  SSS9nU R                  UR                  5       [        S5      /5        U R                  UR                  [        S5      5      [        S5      /5        g	)
ztest encoding parameterr   r   r    Tr   u   realmær   r   N)rO   rd   r   r  ra   r   rI   r3  r   r   r   re   s     r   test_09_encodings"HtdigestFileTest.test_09_encodings  s     	*f&9&9HM   ,,T-@-@7cg,h-(8&:;!M"23q5HI   ,,T-B-BYgk,l-(8&:;!M"23q5HIr   c                    [         R                  R                  U R                  5      nU R	                  UR                  5       U R                  5        [         R                  " 5       nU R	                  UR                  5       S5        g)ztest to_string()r   N)r   r  ra   rH   rI   rJ   re   s     r   test_10_to_string"HtdigestFileTest.test_10_to_string  r   r   c                     U R                  [        [        R                  R                  S5        U R                  [        [        R                  R                  S5        g )Ns   realm:user1:pass1:other
r   )rO   rd   r   r  ra   r   s    r   r   "HtdigestFileTest.test_11_malformed  sD    *f&9&9&E&E(	**f&9&9&E&E	r   r	  N)r
  r  r  r  r  r  rH   rc   ry   r   r   rT   rf   rl   r|   r   r   r   r   r4  r   r;  r>  r   r  r	  r   r   r  r     sw    !&CICICI VNO>$C9<82S2'.R9,	.\J	.r   r  )
   rW   ))r  
__future__r   loggingr   r   r&   passlibr   r   passlib.excr   passlib.utils.compatr   passlib.tests.backportsr	   passlib.tests.utilsr
   r   r   r   r   passlib.utilsr   passlib.utils.handlersr   r
  r9   r   environgetr(   r2   r6   r<   HAVE_HTPASSWDr  r  r  r>   r  r	  r   r   <module>rO     s    F &  	  % + ' , R R " " :# 

;<J
" '7&8 ## ++M;]^ ]Ox ]OLyx yr   