§
    HŠtjør  ã                   ó€  — d Z ddlmZ ddlm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 ddlmZ dd	lmZmZmZmZ dd
lmZ ddlmZ ddlmZ  ee¦  «        Zdd„Zej                             d¦  «        pdZdd„Z d„ Z!d„ Z" e"¦   «         \  Z#Z$ ej%        e#d¦  «        Z& G d„ de¦  «        Z' G d„ de¦  «        Z(dS )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_identifyé
   c                 ó¶   — t           j                             | ¦  «        }t           j                             | ¦  «        |z
  }t          j        | ||f¦  «         dS )z)backdate file's mtime by specified amountN)ÚosÚpathÚgetatimeÚgetmtimeÚutime)r   ÚoffsetÚatimeÚmtimes       úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/passlib/tests/test_apache.pyÚbackdate_file_mtimer      sO   € õ ŒG×Ò˜TÑ"Ô"€EÝŒG×Ò˜TÑ"Ô" 6Ñ)€EÝ„HˆT�E˜5�>Ñ"Ô"Ð"Ð"Ð"ó    ÚPASSLIB_TEST_HTPASSWD_PATHÚhtpasswdc                 ó8  — |�|                      d¦  «        }t          j        t          g| z   t          j        t          j        |rt          j        nd¬¦  «        }|                     |¦  «        \  }}|                     ¦   «         }t          |pd¦  «        }||fS )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_htpasswdr3   +   s”   € ð ÐØ—’˜WÑ%Ô%ˆÝÔ�]˜O¨dÑ2½:¼?Ý#-Ô#4ÈuÐ<^½J¼O¸OÐZ^ð`ñ `ô `€Dà×Ò Ñ&Ô&�H€CˆØ	�Š‰Œ€BÝ
! # )¨Ñ
,Ô
,€CØ�ˆ7€Nr   c                 ó4   — t          d| |g|¦  «        \  }}| S )z%
    wrapper for htpasswd verify
    z-vi)r3   )r   ÚuserÚpasswordr0   r2   s        r   Ú_call_htpasswd_verifyr7   9   s%   € õ ˜e T¨4Ð0°(Ñ;Ô;�G€CˆØˆ6€Mr   c                  ó”   — 	 t          g ¦  «        \  } }n# t          $ r Y dS w xY w|st                               d¦  «         d| v }d|fS )z0
    helper to check if htpasswd is present
    )FFz htpasswd test returned with rc=0z -B T)r3   ÚOSErrorÚlogÚwarning)r0   r2   Úhave_bcrypts      r   Ú_detect_htpasswdr=   A   so   € ðÝ  Ñ$Ô$‰ˆˆRˆRøÝð ð ð ð ˆ|ˆ|ðøøøð
 ð 8Ý�ŠÐ6Ñ7Ô7Ð7Ø˜C�-€KØ�ÐÐs   ‚ •
#¢#z requires `htpasswd` cmdline toolc                   ó  — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Ze e j!         e"j#        d¦  «        d¦  «        d„ ¦   «         ¦   «         Z$d S )!ÚHtpasswdFileTestz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                 ób  — |                       ¦   «         }t          || j        ¦  «         t          j        |¦  «        }|                      |                     ¦   «         | j        ¦  «         |                      |j        |¦  «         |                      |j	        ¦  «         |dz   |_        |                      |j        |dz   ¦  «         |  
                    |j	        ¦  «         t          j        |d¬¦  «        }|                      |                     ¦   «         d¦  «         |                      |j        |¦  «         |  
                    |j	        ¦  «         |                      d¦  «        5  t          j        |d¬¦  «        }ddd¦  «         n# 1 swxY w Y   |                      |                     ¦   «         d¦  «         |                      |j        |¦  «         |  
                    |j	        ¦  «         t          j        |¦  «         |                      t          t          j        |¦  «         dS )	ú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_autoloadz-HtpasswdFileTest.test_00_constructor_autoload}   s  € ð �{Š{‰}Œ}ˆÝ��t”~Ñ&Ô&Ð&ÝÔ  Ñ&Ô&ˆØ×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8Ø×Ò˜œ $Ñ'Ô'Ð'Ø�Š˜œÑ!Ô!Ð!ð ˜‘*ˆŒØ×Ò˜œ $¨¡*Ñ-Ô-Ð-Ø×Ò˜œÑ"Ô"Ð"õ Ô  ¨4Ð0Ñ0Ô0ˆØ×Ò˜Ÿš™œ¨Ñ-Ô-Ð-Ø×Ò˜œ $Ñ'Ô'Ð'Ø×Ò˜œÑ"Ô"Ð"ð ×#Ò#Ð$FÑGÔGð 	;ð 	;ÝÔ$ T°EÐ:Ñ:Ô:ˆBð	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;à×Ò˜Ÿš™œ¨Ñ-Ô-Ð-Ø×Ò˜œ $Ñ'Ô'Ð'Ø×Ò˜œÑ"Ô"Ð"õ 	Œ	�$‰ŒˆØ×Ò�'¥6Ô#6¸Ñ=Ô=Ð=Ð=Ð=s   Å*FÆFÆFc                 óZ  — |                       ¦   «         }t          || j        ¦  «         t          j                             |¦  «        }|                      |                     ¦   «         | j        ¦  «         |                      |j        d ¦  «         |  	                    |j
        ¦  «         d S ©N)rG   r   rH   r   r@   Ú	from_pathrI   rJ   r   rL   r   rQ   s      r   Útest_00_from_pathz"HtpasswdFileTest.test_00_from_pathŸ   s‹   € Ø�{Š{‰}Œ}ˆÝ��t”~Ñ&Ô&Ð&ÝÔ ×*Ò*¨4Ñ0Ô0ˆØ×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8Ø×Ò˜œ $Ñ'Ô'Ð'Ø×Ò˜œÑ"Ô"Ð"Ð"Ð"r   c                 óÚ  — t           j                             | j        ¦  «        }|                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     ¦   «         | j	        ¦  «         |  
                    t          |j        d¦  «         dS )útest delete()Úuser1Úuser2Úuser5úuser:N)r   r@   Úfrom_stringrH   rK   ÚdeleterL   rI   rJ   Ú	sample_02rO   Ú
ValueError©rR   rS   s     r   Útest_01_deletezHtpasswdFileTest.test_01_delete§   s¸   € åÔ ×,Ò,¨T¬^Ñ<Ô<ˆØ�Š˜Ÿ	š	 'Ñ*Ô*Ñ+Ô+Ð+Ø�Š˜Ÿ	š	 'Ñ*Ô*Ñ+Ô+Ð+Ø×Ò˜Ÿš 7Ñ+Ô+Ñ,Ô,Ð,Ø×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8ð 	×Ò�* b¤i°Ñ9Ô9Ð9Ð9Ð9r   c                 ó†  — |                       ¦   «         }d}t          ||¦  «         t          j        |¦  «        }|                     d¦  «         |                      t          |¦  «        |¦  «         t          j        |d¬¦  «        }|                     d¦  «         |                      t          |¦  «        d¦  «         d S )Ns   user1:pass1
user2:pass2
r[   T)Úautosaves   user2:pass2
)rG   r   r   r@   r`   rI   r   ©rR   r   ÚsamplerS   s       r   Útest_01_delete_autosavez(HtpasswdFileTest.test_01_delete_autosave²   s¬   € Ø�{Š{‰}Œ}ˆØ.ˆÝ��vÑÔÐåÔ  Ñ&Ô&ˆØ
�	Š	�'ÑÔÐØ×Ò� $™œ¨Ñ0Ô0Ð0åÔ  °Ð5Ñ5Ô5ˆØ
�	Š	�'ÑÔÐØ×Ò� $™œÐ)9Ñ:Ô:Ð:Ð:Ð:r   c                 ó  — t           j                             | j        d¬¦  «        }|                      |                     dd¦  «        ¦  «         |                      |                     dd¦  «        ¦  «         |                      |                     ¦   «         | j	        ¦  «         |  
                    d¦  «        5  t           j                             | j        d¬¦  «        }d	d	d	¦  «         n# 1 swxY w Y   |                      |                     dd¦  «        ¦  «         |                      |                     dd¦  «        ¦  «         |                      |                     ¦   «         | j	        ¦  «         |                      t          |j        d
d¦  «         |  
                    d¦  «        5  |                     dd¦  «         d	d	d	¦  «         n# 1 swxY w Y   |                      |                     dd¦  «        ¦  «         d	S )ztest set_password()Ú	plaintext©Údefault_schemer\   Úpass2xr]   Úpass5z``default`` is deprecated)ÚdefaultNr^   Úpassúupdate\(\) is deprecatedÚtest)r   r@   r_   rH   rK   Úset_passwordrL   rI   rJ   Ú	sample_03rM   rO   rb   ÚupdateÚcheck_passwordrc   s     r   Útest_02_set_passwordz%HtpasswdFileTest.test_02_set_password¿   sJ  € åÔ ×,Ò,ØŒN¨;ð -ñ 8ô 8ˆà�Š˜Ÿš¨°Ñ:Ô:Ñ;Ô;Ð;Ø×Ò˜Ÿš¨°'Ñ:Ô:Ñ;Ô;Ð;Ø×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8ð ×#Ò#Ð$?Ñ@Ô@ð 	Vð 	VÝÔ$×0Ò0°´ÈÐ0ÑUÔUˆBð	Vð 	Vð 	Vñ 	Vô 	Vð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vøøøð 	Vð 	Vð 	Vð 	Và�Š˜Ÿš¨°Ñ:Ô:Ñ;Ô;Ð;Ø×Ò˜Ÿš¨°'Ñ:Ô:Ñ;Ô;Ð;Ø×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8ð 	×Ò�* b¤o°wÀÑGÔGÐGð ×#Ò#Ð$>Ñ?Ô?ð 	'ð 	'Ø�IŠI�g˜vÑ&Ô&Ð&ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'à�Š˜×)Ò)¨'°6Ñ:Ô:Ñ;Ô;Ð;Ð;Ð;s$   Â;'C.Ã.C2Ã5C2Æ/GÇGÇGc                 óŒ  — |                       ¦   «         }d}t          ||¦  «         t          j        |¦  «        }|                     dd¦  «         |                      t          |¦  «        |¦  «         t          j        |dd¬¦  «        }|                     dd¦  «         |                      t          |¦  «        d¦  «         d S )Nó   user1:pass1
r[   Úpass2rk   T)rm   rf   s   user1:pass2
)rG   r   r   r@   rt   rI   r   rg   s       r   Útest_02_set_password_autosavez.HtpasswdFileTest.test_02_set_password_autosaveÖ   s²   € Ø�{Š{‰}Œ}ˆØ!ˆÝ��vÑÔÐåÔ  Ñ&Ô&ˆØ
�Š˜ Ñ)Ô)Ð)Ø×Ò� $™œ¨Ñ0Ô0Ð0åÔ  °kÈDÐQÑQÔQˆØ
�Š˜ Ñ)Ô)Ð)Ø×Ò� $™œÐ)9Ñ:Ô:Ð:Ð:Ð:r   c                 ó8  — d„ }|                        |d¦  «        d¦  «         |                        |d¦  «        d¦  «         |                      t          |d¦  «         |                        |d¦  «        t          j        d         ¦  «         |                        |d¦  «        t          j        d         ¦  «         |                        |d¦  «        t          j        d         ¦  «         |                        |d¦  «        t          j        d         ¦  «         dS )	z%test set_password() -- default_schemec                 ó²   — t          j        | ¬¦  «        }|                     dd¦  «         |j                             |                     d¦  «        ¦  «        S )Nrl   r[   Úpass1)r   r@   rt   ÚcontextÚidentifyÚget_hash)ÚschemerS   s     r   ÚcheckzCHtpasswdFileTest.test_02_set_password_default_scheme.<locals>.checkæ   sK   € ÝÔ$°FÐ;Ñ;Ô;ˆBØ�OŠO˜G WÑ-Ô-Ð-Ø”:×&Ò& 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_schemez4HtpasswdFileTest.test_02_set_password_default_schemeã   s  € ð	=ð 	=ð 	=ð 	×Ò˜˜˜~Ñ.Ô.°Ñ?Ô?Ð?Ø×Ò˜˜˜{Ñ+Ô+¨[Ñ9Ô9Ð9ð 	×Ò�( E¨5Ñ1Ô1Ð1ð 	×Ò˜˜˜zÑ*Ô*­FÔ,DÀZÔ,PÑQÔQÐQØ×Ò˜˜Ð3Ñ4Ô4µfÔ6NÐOcÔ6dÑeÔeÐeØ×Ò˜˜Ð/Ñ0Ô0µ&Ô2JÐK[Ô2\Ñ]Ô]Ð]ð 	×Ò˜˜˜t™œ¥fÔ&>Ð?SÔ&TÑUÔUÐUÐUÐUr   c                 ó>  — t           j                             | j        ¦  «        }|                     dd¦  «         |                     d¦  «         |                     dd¦  «         |                      t          |                     ¦   «         ¦  «        g d¢¦  «         dS )útest users()r]   ro   Úuser3Úpass3©r[   r\   r�   Úuser4r]   N)	r   r@   r_   rH   rt   r`   rI   ÚsortedÚusersrc   s     r   Útest_03_userszHtpasswdFileTest.test_03_usersú   s‡   € åÔ ×,Ò,¨T¬^Ñ<Ô<ˆØ
�Š˜ Ñ)Ô)Ð)Ø
�	Š	�'ÑÔÐØ
�Š˜ Ñ)Ô)Ð)Ø×Ò� §¢¡
¤
Ñ+Ô+Ð-ZÐ-ZÐ-ZÑ[Ô[Ð[Ð[Ð[r   c                 ób  — t           j                             | j        ¦  «        }|                      t
          |j        dd¦  «         |                      |                     dd¦  «        du ¦  «         t          dd¦  «        D ]†}t          |¦  «        }	 |                      |                     d|z   d|z   ¦  «        ¦  «         |                      |                     d|z   d¦  «        du ¦  «         Œp# t          $ r
 |d	k    rY Œ‚‚ w xY w|                      t          |j        d
d¦  «         |                      dgdz  ¦  «        5  |                      |                     dd¦  «        ¦  «         |                      |                     dd¦  «        ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )útest check_password()é   Úpass9Úuser9Né   r5   rq   FÚ5r^   úverify\(\) is deprecatedé   r[   r   r{   )r   r@   r_   Ú	sample_05rO   Ú	TypeErrorrw   rK   r   Ústrr   rb   rM   ÚverifyrL   ©rR   rS   Úis      r   Útest_04_check_passwordz'HtpasswdFileTest.test_04_check_password  sï  € åÔ ×,Ò,¨T¬^Ñ<Ô<ˆØ×Ò�) RÔ%6¸¸7ÑCÔCÐCØ�Š˜×)Ò)¨'°'Ñ:Ô:¸dÐBÑCÔCÐCõ ˜˜1‘”ð 		ð 		ˆAÝ�A‘”ˆAðØ—’ × 1Ò 1°&¸±(¸FÀ1¹HÑ EÔ EÑFÔFÐFØ—’ × 1Ò 1°&¸±(¸GÑ DÔ DÈÐ MÑNÔNÐNÐNøÝ&ð ð ð Ø˜’8�8à�HØð	øøøð 	×Ò�* bÔ&7¸À&ÑIÔIÐIð ×#Ò#Ð%?Ð$@ÀÑ$BÑCÔCð 	:ð 	:Ø�OŠO˜BŸIšI g¨wÑ7Ô7Ñ8Ô8Ð8Ø×Ò˜RŸYšY w°Ñ8Ô8Ñ9Ô9Ð9ð	:ð 	:ð 	:ñ 	:ô 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:øøøð 	:ð 	:ð 	:ð 	:ð 	:ð 	:s&   ÂAC2Ã2DÄDÅAF$Æ$F(Æ+F(c                 óZ  — |                       ¦   «         }t          |d¦  «         t          |d¦  «         t          j        |d¬¦  «        }|                      |                     ¦   «         d¦  «         |                     dd¦  «         |                     ¦   «          |                      |                     ¦   «         d¦  «         t          || j	        ¦  «         |                     ¦   «          |                      |                     ¦   «         | j	        ¦  «         |                     d	d
¦  «         | 
                    ¦   «          |                      |                     ¦   «         | j	        ¦  «         t          j        ¦   «         }|                      t          |j
        ¦  «         |                      t          |j        ¦  «         t          || j        ¦  «         t          j        ¦   «         }| 
                    |¦  «         |                      |                     dd¦  «        ¦  «         dS )útest load()r%   é   rk   rl   r   r[   r   rz   r]   ro   N)rG   r   r   r   r@   rI   rJ   rt   Úload_if_changedrH   ÚloadrO   ÚRuntimeErrorÚ
sample_duprK   rw   ©rR   r   ÚhaÚhbÚhcs        r   Útest_05_loadzHtpasswdFileTest.test_05_load  sÎ  € ð �{Š{‰}Œ}ˆÝ��rÑÔÐÝ˜D !Ñ$Ô$Ð$ÝÔ  °kÐBÑBÔBˆØ×Ò˜Ÿš™œ¨Ñ-Ô-Ð-ð 	�Š˜ Ñ)Ô)Ð)Ø
×ÒÑÔÐØ×Ò˜Ÿš™œÐ)9Ñ:Ô:Ð:õ 	��t”~Ñ&Ô&Ð&Ø
×ÒÑÔÐØ×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8ð 	�Š˜ Ñ)Ô)Ð)Ø
�Š‰	Œ	ˆ	Ø×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8õ Ô Ñ"Ô"ˆØ×Ò�,¨¬Ñ0Ô0Ð0Ø×Ò�,¨Ô(:Ñ;Ô;Ð;õ 	��t”Ñ'Ô'Ð'ÝÔ Ñ"Ô"ˆØ
�Š�‰ŒˆØ�Š˜×)Ò)¨'°'Ñ:Ô:Ñ;Ô;Ð;Ð;Ð;r   c                 óR  — |                       ¦   «         }t          || j        ¦  «         t          j        |¦  «        }|                     d¦  «         |                     d¦  «         |                     ¦   «          |                      t          |¦  «        | j	        ¦  «         t          j        d¬¦  «        }| 
                    dd¦  «         |                      t          |j        ¦  «         |                     |¦  «         |                      t          |¦  «        d¦  «         dS )útest save()r[   r\   rk   rl   r   rz   N)rG   r   rH   r   r@   r`   ÚsaverI   r   ra   rt   rO   r¬   ©rR   r   rS   r°   s       r   Útest_06_savezHtpasswdFileTest.test_06_saveA  sù   € ð �{Š{‰}Œ}ˆÝ��t”~Ñ&Ô&Ð&ÝÔ  Ñ&Ô&ˆð 	�	Š	�'ÑÔÐØ
�	Š	�'ÑÔÐØ
�Š‰	Œ	ˆ	Ø×Ò� $™œ¨¬Ñ8Ô8Ð8õ Ô °Ð<Ñ<Ô<ˆØ
�Š˜ Ñ)Ô)Ð)Ø×Ò�,¨¬Ñ0Ô0Ð0ð 	�Š�‰ŒˆØ×Ò� $™œÐ)9Ñ:Ô:Ð:Ð:Ð:r   c                 óÀ  — |                       t          t          j        d¬¦  «         t          j                             | j        dd¬¦  «        }|                      |                     ¦   «         t          d¦  «        g¦  «         |  	                    d¦  «        5  t          j                             | j        d¬¦  «        }ddd¦  «         n# 1 swxY w Y   |                      |                     ¦   «         d	g¦  «         t          j                             | j
        d
d¬¦  «        }|                      |                     ¦   «         t          d¦  «        g¦  «         dS )ztest 'encoding' kwdúutf-16©Úencodingr!   T©r»   Úreturn_unicodeõ   userÃ¦z``encoding=None`` is deprecatedNs   userÃ¦úlatin-1)rO   rb   r   r@   r_   Úsample_04_utf8rI   r•   r   rM   Úsample_04_latin1rc   s     r   Útest_07_encodingsz"HtpasswdFileTest.test_07_encodingsW  s‰  € ð 	×Ò�*¥fÔ&9ÀHÐÑMÔMÐMõ Ô ×,Ò,¨TÔ-@È7Ø<@ð -ñ Bô Bˆà×Ò˜Ÿš™œ¥q¨¡¤Ð%8Ñ9Ô9Ð9ð ×#Ò#Ð$EÑFÔFð 	Uð 	UÝÔ$×0Ò0°Ô1DÈtÐ0ÑTÔTˆBð	Uð 	Uð 	Uñ 	Uô 	Uð 	Uð 	Uð 	Uð 	Uð 	Uð 	Uøøøð 	Uð 	Uð 	Uð 	Uà×Ò˜Ÿš™œ Ð%8Ñ9Ô9Ð9õ Ô ×,Ò,¨TÔ-BØ7@ÐQUð -ñ Wô Wˆà×Ò˜Ÿš™œ¥q¨¡¤Ð%8Ñ9Ô9Ð9Ð9Ð9s   Â'CÃCÃCc                 óò  — t           j                             | j        ¦  «        }|                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      d¦  «        5  |                      |                     d¦  «        d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )útest get_hash()r�   s!   {SHA}3ipNV1GrBtxPmHFC21fCbVCSXIo=r“   s   pass4r]   Núfind\(\) is deprecated)r   r@   r_   rH   rI   r‚   rM   Úfindrc   s     r   Útest_08_get_hashz!HtpasswdFileTest.test_08_get_hashk  s  € åÔ ×,Ò,¨T¬^Ñ<Ô<ˆØ×Ò˜Ÿš WÑ-Ô-Ð/SÑTÔTÐTØ×Ò˜Ÿš WÑ-Ô-¨xÑ8Ô8Ð8Ø×Ò˜Ÿš WÑ-Ô-¨tÑ4Ô4Ð4à×#Ò#Ð$<Ñ=Ô=ð 	9ð 	9Ø×Ò˜RŸWšW WÑ-Ô-¨xÑ8Ô8Ð8ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð 	9ð 	9s   Â5*C,Ã,C0Ã3C0c                 ó  — t           j                             | j        ¦  «        }|                      |                     ¦   «         | j        ¦  «         t          j        ¦   «         }|                      |                     ¦   «         d¦  «         dS )ztest to_stringr   N)r   r@   r_   rH   rI   rJ   rc   s     r   Útest_09_to_stringz"HtpasswdFileTest.test_09_to_stringu  óp   € õ Ô ×,Ò,¨T¬^Ñ<Ô<ˆØ×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8õ Ô Ñ"Ô"ˆØ×Ò˜Ÿš™œ¨Ñ-Ô-Ð-Ð-Ð-r   c                 óT   — t          j        dddd¬¦  «        }t          |¦  «         d S )NÚfakepathTr¿   )rf   rE   r»   )r   r@   Úreprrc   s     r   Útest_10_reprzHtpasswdFileTest.test_10_repr€  s*   € ÝÔ  °dÀÈyÐYÑYÔYˆÝˆR‰Œˆˆˆr   c                 ó²   — |                       t          t          j        j        d¦  «         |                       t          t          j        j        d¦  «         d S )Ns   realm:user1:pass1
s   pass1
)rO   rb   r   r@   r_   ©rR   s    r   Útest_11_malformedz"HtpasswdFileTest.test_11_malformed„  sV   € Ø×Ò�*¥fÔ&9Ô&EØ"ñ	$ô 	$ð 	$à×Ò�*¥fÔ&9Ô&EØñ	ô 	ð 	ð 	ð 	r   c                 ó`   — |                       t          t          j        j        dd ¬¦  «         d S )Nr   )r   )rO   r¡   r   r@   r_   rÐ   s    r   Útest_12_from_stringz$HtpasswdFileTest.test_12_from_stringŠ  s8   € à×Ò�)¥VÔ%8Ô%DØ Dð 	ñ 	*ô 	*ð 	*ð 	*ð 	*r   c                 ó
  — t          d¦  «        }t          j                             |¦  «        }|                      t          |                     ¦   «         ¦  «        g d¢¦  «         |                     dd¦  «         |                      t          |                     ¦   «         ¦  «        g d¢¦  «         |                     dd¦  «         |                      t          |                     ¦   «         ¦  «        g d¢¦  «         |                     d¦  «         |                      t          |                     ¦   «         ¦  «        g d	¢¦  «         t          d
¦  «        }|                      | 	                    ¦   «         |¦  «         dS )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@   r_   rI   r”   r•   Úset_hashr`   rJ   )rR   ÚsourcerS   Útargets       r   Útest_13_whitespacez#HtpasswdFileTest.test_13_whitespace�  s`  € õ
 ðñ

ô 

ˆõ Ô ×,Ò,¨VÑ4Ô4ˆØ×Ò� §¢¡
¤
Ñ+Ô+Ð-ZÐ-ZÐ-ZÑ[Ô[Ð[ð 	�Š�G˜ZÑ(Ô(Ð(Ø×Ò� §¢¡
¤
Ñ+Ô+Ð-ZÐ-ZÐ-ZÑ[Ô[Ð[ð 	�Š�G˜ZÑ(Ô(Ð(Ø×Ò� §¢¡
¤
Ñ+Ô+Ð-cÐ-cÐ-cÑdÔdÐdð 	�	Š	�'ÑÔÐØ×Ò� §¢¡
¤
Ñ+Ô+Ð-ZÐ-ZÐ-ZÑ[Ô[Ð[õ ðñ

ô 

ˆð 	×Ò˜Ÿš™œ¨Ñ0Ô0Ð0Ð0Ð0r   c                 óº  ‡— |                       ¦   «         }t          j        |d¬¦  «        Šˆfd„}‰                     d |dd¦  «        ¦  «         t          j        d         }‰                     d |d|¦  «        ¦  «         t          j        d	         }‰                     d
 |d|¦  «        ¦  «         ‰                     dd¦  «         ‰                     ¦   «          |                      t          |dd¦  «        ¦  «         |                      t          |dd¦  «        ¦  «         |                      t          |d
d¦  «        ¦  «         |                      t          |dd¦  «        ¦  «         |                      t          |dd¦  «        ¦  «         |                      t          |dd¦  «        ¦  «         |                      t          |d
d¦  «        ¦  «         dS )z;
        verify "htpasswd" command can read output
        T©r   rE   c                 ó^   •— ‰j                              |¦  «                             | ¦  «        S rV   ©r€   ÚhandlerÚhash©Úpwdrƒ   rS   s     €r   Úhash_schemez>HtpasswdFileTest.test_htpasswd_cmd_verify.<locals>.hash_schemeÆ  ó'   ø€ Ø”:×%Ò% fÑ-Ô-×2Ò2°3Ñ7Ô7Ð7r   r[   r6   Úapr_md5_cryptrŠ   r\   Úhostr�   r“   z$xxx$foo$bar$bazÚwrongN)	rG   r   r@   rÙ   rŒ   rµ   rL   r7   rK   )rR   r   rå   Úhost_no_bcryptÚ	host_bestrS   s        @r   Útest_htpasswd_cmd_verifyz)HtpasswdFileTest.test_htpasswd_cmd_verify¾  sÎ  ø€ ð
 �{Š{‰}Œ}ˆÝÔ  d°Ð5Ñ5Ô5ˆð	8ð 	8ð 	8ð 	8ð 	8ð 	�Š�G˜[˜[¨°OÑDÔDÑEÔEÐEõ  Ô1Ð2BÔCˆØ
�Š�G˜[˜[¨°^ÑDÔDÑEÔEÐEõ Ô,¨VÔ4ˆ	Ø
�Š�G˜[˜[¨°YÑ?Ô?Ñ@Ô@Ð@ð 	�Š�GÐ/Ñ0Ô0Ð0ð 	�Š‰	Œ	ˆ	à×ÒÕ.¨t°W¸gÑFÔFÑGÔGÐGØ×ÒÕ.¨t°W¸gÑFÔFÑGÔGÐGØ×ÒÕ.¨t°W¸gÑFÔFÑGÔGÐGØ×ÒÕ.¨t°W¸gÑFÔFÑGÔGÐGà�ŠÕ-¨d°G¸ZÑHÔHÑIÔIÐIØ�ŠÕ-¨d°G¸ZÑHÔHÑIÔIÐIØ�ŠÕ-¨d°G¸ZÑHÔHÑIÔIÐIÐIÐIr   Úbcryptzbcrypt support requiredc                 ó¸  ‡— |                       ¦   «         }t          j        |d¬¦  «        Šˆfd„}‰                     d |dd¦  «        ¦  «         ‰                     ¦   «          |                      t          |dd¦  «        ¦  «         t          r&|                      t          |dd¦  «        ¦  «         dS |                      t          |dd¦  «        ¦  «         dS )	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                 ó^   •— ‰j                              |¦  «                             | ¦  «        S rV   rà   rã   s     €r   rå   zEHtpasswdFileTest.test_htpasswd_cmd_verify_bcrypt.<locals>.hash_schemeî  ræ   r   r[   r6   rí   ré   N)	rG   r   r@   rÙ   rµ   rL   r7   ÚHAVE_HTPASSWD_BCRYPTrK   )rR   r   rå   rS   s      @r   Útest_htpasswd_cmd_verify_bcryptz0HtpasswdFileTest.test_htpasswd_cmd_verify_bcryptã  så   ø€ ð �{Š{‰}Œ}ˆÝÔ  d°Ð5Ñ5Ô5ˆð	8ð 	8ð 	8ð 	8ð 	8à
�Š�G˜[˜[¨°XÑ>Ô>Ñ?Ô?Ð?Ø
�Š‰	Œ	ˆ	Ø×ÒÕ.¨t°W¸gÑFÔFÑGÔGÐGÝð 	OØ�OŠOÕ1°$¸ÀÑLÔLÑMÔMÐMÐMÐMð ×ÒÕ2°4¸À*ÑMÔMÑNÔNÐNÐNÐNr   N)%Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚdescriptionPrefixrH   ra   ru   rÀ   rÁ   r­   r    rT   rX   rd   ri   rx   r|   r�   r–   r¦   r²   r·   rÂ   rÇ   rÉ   rÎ   rÑ   rÓ   rÜ   Úrequires_htpasswd_cmdrì   r	   Ú
skipUnlessr   Úhas_backendrñ   © r   r   r?   r?   Z   sÓ  € € € € € Ø!Ð!Ø&ÐðB€Ið J€Ið"€Ið 5€NØ2Ðà.€JðF€Ið>ð >ð >ðD#ð #ð #ð	:ð 	:ð 	:ð;ð ;ð ;ð<ð <ð <ð.;ð ;ð ;ðVð Vð Vð.\ð \ð \ð:ð :ð :ð4!<ð !<ð !<ðJ;ð ;ð ;ð,:ð :ð :ð(9ð 9ð 9ð	.ð 	.ð 	.ðð ð ðð ð ð*ð *ð *ð
-1ð -1ð -1ð^ ð"Jð "Jñ Ôð"JðH Ø€XÔÐ-˜Ô-¨hÑ7Ô7Ð9RÑSÔSðOð Oñ TÔSñ ÔðOð Oð Or   r?   c                   óx   — e Zd ZdZdZdZdZdZdZdZ	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚHtdigestFileTestz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                 óÊ  — |                       ¦   «         }t          || j        ¦  «         t          j        |¦  «        }|                      |                     ¦   «         | j        ¦  «         t          j        |d¬¦  «        }|                      |                     ¦   «         d¦  «         t          j        |¦  «         |  	                    t          t          j        |¦  «         dS )rB   TrD   r   N)rG   r   rH   r   rý   rI   rJ   r   rN   rO   rP   rQ   s      r   rT   z-HtdigestFileTest.test_00_constructor_autoload  s¸   € ð �{Š{‰}Œ}ˆÝ��t”~Ñ&Ô&Ð&ÝÔ  Ñ&Ô&ˆØ×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8õ Ô  ¨4Ð0Ñ0Ô0ˆØ×Ò˜Ÿš™œ¨Ñ-Ô-Ð-õ 	Œ	�$‰ŒˆØ×Ò�'¥6Ô#6¸Ñ=Ô=Ð=Ð=Ð=r   c                 óx  — t           j                             | j        ¦  «        }|                      |                     dd¦  «        ¦  «         |                      |                     dd¦  «        ¦  «         |                      |                     dd¦  «        ¦  «         |                      |                     dd¦  «        ¦  «         |                      |                     ¦   «         | j	        ¦  «         |  
                    t          |j        dd¦  «         |  
                    t          |j        dd	¦  «         d
S )rZ   r[   Úrealmr\   r]   r�   Úrealm5r^   r5   úrealm:N)r   rý   r_   rH   rK   r`   rL   rI   rJ   ra   rO   rb   rc   s     r   rd   zHtdigestFileTest.test_01_delete+  s   € åÔ ×,Ò,¨T¬^Ñ<Ô<ˆØ�Š˜Ÿ	š	 '¨7Ñ3Ô3Ñ4Ô4Ð4Ø�Š˜Ÿ	š	 '¨7Ñ3Ô3Ñ4Ô4Ð4Ø×Ò˜Ÿš 7¨GÑ4Ô4Ñ5Ô5Ð5Ø×Ò˜Ÿš 7¨HÑ5Ô5Ñ6Ô6Ð6Ø×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8ð 	×Ò�* b¤i°¸'ÑBÔBÐBð 	×Ò�* b¤i°¸ÑBÔBÐBÐBÐBr   c                 óv  — |                       ¦   «         }t          || j        ¦  «         t          j        |¦  «        }|                      |                     dd¦  «        ¦  «         |                      |                     dd¦  «        ¦  «         |                      |                     dd¦  «        ¦  «         |                      t          |¦  «        | j        ¦  «         d|_
        |                      |                     dd¦  «        ¦  «         |                      t          |¦  «        | j        ¦  «         d S )Nr[   r   r�   r  r]   Tr\   )rG   r   rH   r   rý   rK   r`   rL   rI   r   rf   ra   rQ   s      r   ri   z(HtdigestFileTest.test_01_delete_autosave:  sþ   € Ø�{Š{‰}Œ}ˆÝ��t”~Ñ&Ô&Ð&åÔ  Ñ&Ô&ˆØ�Š˜Ÿ	š	 '¨7Ñ3Ô3Ñ4Ô4Ð4Ø×Ò˜Ÿš 7¨HÑ5Ô5Ñ6Ô6Ð6Ø×Ò˜Ÿš 7¨GÑ4Ô4Ñ5Ô5Ð5Ø×Ò� $™œ¨¬Ñ8Ô8Ð8àˆŒØ�Š˜Ÿ	š	 '¨7Ñ3Ô3Ñ4Ô4Ð4Ø×Ò� $™œ¨¬Ñ8Ô8Ð8Ð8Ð8r   c                 óî  — t           j                             | j        ¦  «        }|                      |                     ddd¦  «        ¦  «         |                      |                     ddd¦  «        ¦  «         |                      |                     ¦   «         | j	        ¦  «         |  
                    t          |j        dd¦  «         d|_        |                     dd¦  «         |                     ddd¦  «         |  
                    t          |j        ddd	¦  «         |  
                    t          |j        d
dd	¦  «         |  
                    t          |j        ddd	¦  «         |  
                    t          |j        ddd	¦  «         |                      d¦  «        5  |                     ddd¦  «         ddd¦  «         n# 1 swxY w Y   |                      |                     dd¦  «        ¦  «         dS )ztest update()r\   r   rn   r]   ro   r‘   Úrealm2r^   rq   Á   uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuur5   r  Á   rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr   rs   N)r   rý   r_   rH   rK   rt   rL   rI   rJ   ru   rO   r¡   Údefault_realmrw   rb   rM   rv   rc   s     r   rx   z%HtdigestFileTest.test_02_set_passwordH  sø  € åÔ ×,Ò,¨T¬^Ñ<Ô<ˆØ�Š˜Ÿš¨°¸(ÑCÔCÑDÔDÐDØ×Ò˜Ÿš¨°'¸7ÑCÔCÑDÔDÐDØ×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8ð 	×Ò�) R¤_°g¸wÑGÔGÐGØ#ˆÔØ
�Š˜ Ñ)Ô)Ð)Ø
×Ò˜' 8¨WÑ5Ô5Ð5ð 	×Ò�* b¤o°wÀÈÑPÔPÐPØ×Ò�* b¤o°wÀÈÑPÔPÐPð 	×Ò�* b¤o°v¸xÈÑPÔPÐPØ×Ò�* b¤o°v¸wÈÑOÔOÐOð ×#Ò#Ð$>Ñ?Ô?ð 	1ð 	1Ø�IŠI�g˜x¨Ñ0Ô0Ð0ð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1à�Š˜×)Ò)¨'°6Ñ:Ô:Ñ;Ô;Ð;Ð;Ð;s   ÆGÇGÇGc                 óˆ  — t           j                             | j        ¦  «        }|                     ddd¦  «         |                     dd¦  «         |                     ddd¦  «         |                      t          |                     d¦  «        ¦  «        g d¢¦  «         |  	                    t          |j        d¦  «         dS )	r�   r]   r   ro   r�   r‘   r’   r™   N)r   rý   r_   rH   rt   r`   rI   r”   r•   rO   r¡   rc   s     r   r–   zHtdigestFileTest.test_03_usersd  s«   € åÔ ×,Ò,¨T¬^Ñ<Ô<ˆØ
�Š˜ ¨'Ñ2Ô2Ð2Ø
�	Š	�'˜7Ñ#Ô#Ð#Ø
�Š˜ ¨'Ñ2Ô2Ð2Ø×Ò� §¢¨Ñ 1Ô 1Ñ2Ô2Ð4aÐ4aÐ4aÑbÔbÐbà×Ò�) R¤X¨qÑ1Ô1Ð1Ð1Ð1r   c           	      óx  — t           j                             | j        ¦  «        }|                      t
          |j        ddd¦  «         |                      t
          |j        ddd¦  «         |                      |                     ddd¦  «        d¦  «         t          dd¦  «        D ]o}t          |¦  «        }|  
                    |                     d|z   dd|z   ¦  «        ¦  «         |                      |                     d|z   dd¦  «        d	¦  «         Œp|                      t
          |j        dd¦  «         d|_        |  
                    |                     d
d¦  «        ¦  «         |                      |                     dd¦  «        d¦  «         |                      dgdz  ¦  «        5  |  
                    |                     d
dd¦  «        ¦  «         |                      |                     d
dd¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   |                      t          |j        ddd¦  «         dS )r˜   r™   r   ro   r5   r]   Nr©   rq   Fr[   r   rž   rŸ   r{   r^   )r   rý   r_   rH   rO   r¡   rw   ÚassertIsr   r¢   rK   r  rM   r£   rL   rb   r¤   s      r   r¦   z'HtdigestFileTest.test_04_check_passwordn  sZ  € åÔ ×,Ò,¨T¬^Ñ<Ô<ˆØ×Ò�) RÔ%6¸¸7ÀGÑLÔLÐLØ×Ò�) RÔ%6¸ÀÀ7ÑKÔKÐKØ�Š�b×'Ò'¨°¸ÑAÔAÀ4ÑHÔHÐHÝ˜˜!‘”ð 	Pð 	PˆAÝ�A‘”ˆAØ�OŠO˜B×-Ò-¨f°Q©h¸ÀÈÁÑJÔJÑKÔKÐKØ�MŠM˜"×+Ò+¨F°1©H°g¸wÑGÔGÈÑOÔOÐOÐOð 	×Ò�) RÔ%6¸ÀÑIÔIÐIØ"ˆÔØ�Š˜×)Ò)¨'°7Ñ;Ô;Ñ<Ô<Ð<Ø�Š�b×'Ò'¨°Ñ9Ô9¸4Ñ@Ô@Ð@ð ×#Ò#Ð%?Ð$@ÀÑ$BÑCÔCð 	Cð 	CØ�OŠO˜BŸIšI g¨w¸Ñ@Ô@ÑAÔAÐAØ×Ò˜RŸYšY w°¸ÑAÔAÑBÔBÐBð	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	Cð
 	×Ò�* bÔ&7¸À'È6ÑRÔRÐRÐRÐRs   Æ+AHÈHÈHc                 óL  — |                       ¦   «         }t          |d¦  «         t          |d¦  «         t          j        |¦  «        }|                      |                     ¦   «         d¦  «         |                     ddd¦  «         |                     ¦   «          |                      |                     ¦   «         d¦  «         t          || j	        ¦  «         |                     ¦   «          |                      |                     ¦   «         | j	        ¦  «         |                     ddd	¦  «         | 
                    ¦   «          |                      |                     ¦   «         | j	        ¦  «         t          j        ¦   «         }|                      t          |j
        ¦  «         |                      t          |j        ¦  «         t          j        ¦   «         }| 
                    |¦  «         |                      |                     ¦   «         | j	        ¦  «         t          |¦  «         t          |d¦  «         |                      d
¦  «        5  | 
                    d¬¦  «         ddd¦  «         n# 1 swxY w Y   |                      |                     ¦   «         d¦  «         dS )r¨   r%   r©   r   r[   r   r   s-   user1:realm:2a6cf53e7d8f8cf39d946dc880b14128
r]   ro   z!load\(force=False\) is deprecatedF)ÚforceN)rG   r   r   r   rý   rI   rJ   rt   rª   rH   r«   rO   r¬   r   rM   r®   s        r   r²   zHtdigestFileTest.test_05_load‡  su  € ð �{Š{‰}Œ}ˆÝ��rÑÔÐÝ˜D !Ñ$Ô$Ð$ÝÔ  Ñ&Ô&ˆØ×Ò˜Ÿš™œ¨Ñ-Ô-Ð-ð 	�Š˜ ¨'Ñ2Ô2Ð2Ø
×ÒÑÔÐØ×Ò˜Ÿš™œÐ)ZÑ[Ô[Ð[õ 	��t”~Ñ&Ô&Ð&Ø
×ÒÑÔÐØ×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8ð 	�Š˜ ¨'Ñ2Ô2Ð2Ø
�Š‰	Œ	ˆ	Ø×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8õ Ô Ñ"Ô"ˆØ×Ò�,¨¬Ñ0Ô0Ð0Ø×Ò�,¨Ô(:Ñ;Ô;Ð;õ Ô Ñ"Ô"ˆØ
�Š�‰ŒˆØ×Ò˜Ÿš™œ¨¬Ñ8Ô8Ð8õ 	˜TÑ"Ô"Ð"Ý��rÑÔÐØ×#Ò#Ð$HÑIÔIð 	!ð 	!Ø�GŠG˜%ˆGÑ Ô Ð ð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!à×Ò˜Ÿš™œ¨Ñ-Ô-Ð-Ð-Ð-s   ÉI1É1I5É8I5c                 óx  — |                       ¦   «         }t          || j        ¦  «         t          j        |¦  «        }|                     dd¦  «         |                     dd¦  «         |                     ¦   «          |                      t          |¦  «        | j	        ¦  «         t          j        ¦   «         }| 
                    ddd¦  «         |                      t          |j        ¦  «         |                     |¦  «         |                      t          |¦  «        |                     ¦   «         ¦  «         dS )r´   r[   r   r\   r   N)rG   r   rH   r   rý   r`   rµ   rI   r   ra   rt   rO   r¬   rJ   r¶   s       r   r·   zHtdigestFileTest.test_06_save°  s  € ð �{Š{‰}Œ}ˆÝ��t”~Ñ&Ô&Ð&ÝÔ  Ñ&Ô&ˆð 	�	Š	�'˜7Ñ#Ô#Ð#Ø
�	Š	�'˜7Ñ#Ô#Ð#Ø
�Š‰	Œ	ˆ	Ø×Ò� $™œ¨¬Ñ8Ô8Ð8õ Ô Ñ"Ô"ˆØ
�Š˜ ¨'Ñ2Ô2Ð2Ø×Ò�,¨¬Ñ0Ô0Ð0ð 	�Š�‰ŒˆØ×Ò� $™œ¨¯ª©¬Ñ8Ô8Ð8Ð8Ð8r   c                 óä  — t           j                             | j        ¦  «        }|                      |                     d¦  «        d¦  «         |                      |                     ¦   «         dg¦  «         |                      |                     d¦  «        d¦  «         |                      |                     ¦   «         g ¦  «         |                      |                     ¦   «         d¦  «         dS )ztest realms() & delete_realm()rC   r   r   é   r   N)r   rý   r_   rH   rI   Údelete_realmÚrealmsrJ   rc   s     r   Útest_07_realmszHtdigestFileTest.test_07_realmsÆ  sÀ   € åÔ ×,Ò,¨T¬^Ñ<Ô<ˆà×Ò˜Ÿš¨Ñ-Ô-¨qÑ1Ô1Ð1Ø×Ò˜Ÿš™œ w iÑ0Ô0Ð0à×Ò˜Ÿš¨Ñ1Ô1°1Ñ5Ô5Ð5Ø×Ò˜Ÿš™œ bÑ)Ô)Ð)Ø×Ò˜Ÿš™œ¨Ñ-Ô-Ð-Ð-Ð-r   c                 óú  — t           j                             | j        ¦  «        }|                      |                     dd¦  «        d¦  «         |                      |                     dd¦  «        d¦  «         |                      |                     dd¦  «        d¦  «         |                      d¦  «        5  |                      |                     dd¦  «        d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )	rÄ   r�   r   Ú a500bb8c02f6a9170ae46af10c898744r“   Ú ab7b5d5f28ccc7666315f508c7358519r]   NrÅ   )r   rý   r_   rH   rI   r‚   rM   rÆ   rc   s     r   rÇ   z!HtdigestFileTest.test_08_get_hashÑ  s:  € åÔ ×,Ò,¨T¬^Ñ<Ô<ˆØ×Ò˜Ÿš W¨gÑ6Ô6Ð8ZÑ[Ô[Ð[Ø×Ò˜Ÿš W¨gÑ6Ô6Ð8ZÑ[Ô[Ð[Ø×Ò˜Ÿš W¨gÑ6Ô6¸Ñ=Ô=Ð=à×#Ò#Ð$<Ñ=Ô=ð 	\ð 	\Ø×Ò˜RŸWšW W¨gÑ6Ô6Ð8ZÑ[Ô[Ð[ð	\ð 	\ð 	\ñ 	\ô 	\ð 	\ð 	\ð 	\ð 	\ð 	\ð 	\ð 	\øøøð 	\ð 	\ð 	\ð 	\ð 	\ð 	\s   Â8+C0Ã0C4Ã7C4c                 óØ  — |                       t          t          j        d¬¦  «         t          j                             | j        dd¬¦  «        }|                      |                     ¦   «         t          d¦  «        g¦  «         |                      | 	                    t          d¦  «        ¦  «        t          d¦  «        g¦  «         t          j                             | j
        dd¬¦  «        }|                      |                     ¦   «         t          d¦  «        g¦  «         |                      | 	                    t          d¦  «        ¦  «        t          d¦  «        g¦  «         d	S )
ztest encoding parameterr¹   rº   r!   Tr¼   u   realmÃ¦r¾   r¿   N)rO   rb   r   rý   r_   rÀ   rI   r  r   r•   rÁ   rc   s     r   Útest_09_encodingsz"HtdigestFileTest.test_09_encodingsÛ  s&  € ð 	×Ò�*¥fÔ&9ÀHÐÑMÔMÐMõ Ô ×,Ò,¨TÔ-@È7ÐcgÐ,ÑhÔhˆØ×Ò˜Ÿš™œ­¨-Ñ(8Ô(8Ð&:Ñ;Ô;Ð;Ø×Ò˜Ÿš¥! MÑ"2Ô"2Ñ3Ô3µq¸±´Ð5HÑIÔIÐIõ Ô ×,Ò,¨TÔ-BÈYÐgkÐ,ÑlÔlˆØ×Ò˜Ÿš™œ­¨-Ñ(8Ô(8Ð&:Ñ;Ô;Ð;Ø×Ò˜Ÿš¥! MÑ"2Ô"2Ñ3Ô3µq¸±´Ð5HÑIÔIÐIÐIÐIr   c                 ó  — t           j                             | j        ¦  «        }|                      |                     ¦   «         | j        ¦  «         t          j        ¦   «         }|                      |                     ¦   «         d¦  «         dS )ztest to_string()r   N)r   rý   r_   rH   rI   rJ   rc   s     r   Útest_10_to_stringz"HtdigestFileTest.test_10_to_stringê  rÊ   r   c                 ó²   — |                       t          t          j        j        d¦  «         |                       t          t          j        j        d¦  «         d S )Ns   realm:user1:pass1:other
rz   )rO   rb   r   rý   r_   rÐ   s    r   rÑ   z"HtdigestFileTest.test_11_malformedõ  sV   € Ø×Ò�*¥fÔ&9Ô&EØ(ñ	*ô 	*ð 	*à×Ò�*¥fÔ&9Ô&EØñ	ô 	ð 	ð 	ð 	r   N)rò   ró   rô   rõ   rö   rH   ra   ru   rÀ   rÁ   rT   rd   ri   rx   r–   r¦   r²   r·   r  rÇ   r  r  rÑ   rú   r   r   rü   rü      s  € € € € € Ø!Ð!Ø&ÐðC€IðC€IðC€Ið V€NØOÐð>ð >ð >ð$Cð Cð Cð9ð 9ð 9ð<ð <ð <ð82ð 2ð 2ðSð Sð Sð2'.ð '.ð '.ðR9ð 9ð 9ð,	.ð 	.ð 	.ð\ð \ð \ðJð Jð Jð	.ð 	.ð 	.ðð ð ð ð r   rü   )r   rV   ))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ò   r:   r   ÚenvironÚgetr)   r3   r7   r=   ÚHAVE_HTPASSWDrð   rø   r÷   r?   rü   rú   r   r   ú<module>r(     s  ðØ FÐ Fð &Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð ð %Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø +Ð +Ð +Ð +Ð +Ð +Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ "Ð "Ð "Ð "Ð "Ð "Ø "Ð "Ð "Ð "Ð "Ð "Ø :Ð :Ð :Ð :Ð :Ð :à€i�ÑÔ€ð#ð #ð #ð #ð ”
—’Ð;Ñ<Ô<ÐJÀ
€ðð ð ð ðð ð ðð ð ð" '7Ð&6Ñ&8Ô&8Ñ #€Ð#à+˜Ô+¨MÐ;]Ñ^Ô^Ð ð]Oð ]Oð ]Oð ]Oð ]O�xñ ]Oô ]Oð ]OðLyð yð yð yð y�xñ yô yð yð yð yr   