o
    5Îhør  ã                   @   s  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d„Zej d¡p^dZddd„Z dd„ Z!dd„ Z"e"ƒ \Z#Z$e %e#d¡Z&G dd„ deƒZ'G d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                 C   s0   t j | ¡}t j | ¡| }t  | ||f¡ dS )z)backdate file's mtime by specified amountN)ÚosÚpathÚgetatimeÚgetmtimeÚutime)r   ÚoffsetÚatimeÚmtime© r   úm/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/passlib/tests/test_apache.pyÚbackdate_file_mtime   s   r   ÚPASSLIB_TEST_HTPASSWD_PATHÚhtpasswdc                 C   sb   |dur	|  d¡}tjtg|  tjtj|rtjnd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Úrcr   r   r   Ú_call_htpasswd+   s   
ÿr0   c                 C   s   t d| |g|ƒ\}}| S )z%
    wrapper for htpasswd verify
    z-vi)r0   )r   ÚuserÚpasswordr-   r/   r   r   r   Ú_call_htpasswd_verify9   s   r3   c                  C   sD   zt g ƒ\} }W n
 ty   Y dS 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)r0   ÚOSErrorÚlogÚwarning)r-   r/   Úhave_bcryptr   r   r   Ú_detect_htpasswdA   s   ý
r8   z requires `htpasswd` cmdline toolc                   @   sê   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zed.d/„ ƒZee  !e" #d0¡d1¡d2d3„ ƒƒZ$d4S )5Ú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                 C   s*  |   ¡ }t|| jƒ t |¡}|  | ¡ | j¡ |  |j|¡ |  |j	¡ |d |_|  |j|d ¡ |  
|j	¡ tj|dd}|  | ¡ d¡ |  |j|¡ |  
|j	¡ |  d¡ tj|dd}W d  ƒ n1 slw   Y  |  | ¡ d¡ |  |j|¡ |  
|j	¡ t |¡ |  ttj|¡ dS )	útest constructor autoloadÚxT©Únewó    z ``autoload=False`` is deprecatedF)ÚautoloadN)Úmktempr   Ú	sample_01r   r:   ÚassertEqualÚ	to_stringr   Ú
assertTruer   ÚassertFalseÚassertWarningListr   ÚremoveÚassertRaisesÚIOError©Úselfr   Úhtr   r   r   Útest_00_constructor_autoload}   s*   

ÿ
z-HtpasswdFileTest.test_00_constructor_autoloadc                 C   sP   |   ¡ }t|| jƒ tj |¡}|  | ¡ | j¡ |  |jd ¡ |  	|j
¡ d S ©N)rA   r   rB   r   r:   Ú	from_pathrC   rD   r   rF   r   rK   r   r   r   Útest_00_from_pathŸ   s   z"HtpasswdFileTest.test_00_from_pathc                 C   sd   t j | j¡}|  | d¡¡ |  | d¡¡ |  | d¡¡ |  | ¡ | j	¡ |  
t|jd¡ dS )útest delete()Úuser1Úuser2Úuser5úuser:N)r   r:   Úfrom_stringrB   rE   ÚdeleterF   rC   rD   Ú	sample_02rI   Ú
ValueError©rL   rM   r   r   r   Útest_01_delete§   s   zHtpasswdFileTest.test_01_deletec                 C   sf   |   ¡ }d}t||ƒ t |¡}| d¡ |  t|ƒ|¡ tj|dd}| d¡ |  t|ƒd¡ d S )Ns   user1:pass1
user2:pass2
rS   T)Úautosaves   user2:pass2
)rA   r   r   r:   rX   rC   r
   ©rL   r   ÚsamplerM   r   r   r   Útest_01_delete_autosave²   s   



z(HtpasswdFileTest.test_01_delete_autosavec                 C   s  t jj| jdd}|  | dd¡¡ |  | dd¡¡ |  | ¡ | j	¡ |  
d¡ t jj| jdd}W d	  ƒ n1 s=w   Y  |  | dd¡¡ |  | dd¡¡ |  | ¡ | j	¡ |  t|jd
d¡ |  
d¡ | dd¡ W d	  ƒ n1 s|w   Y  |  | dd¡¡ d	S )ztest set_password()Ú	plaintext©Údefault_schemerT   Úpass2xrU   Úpass5z``default`` is deprecated)ÚdefaultNrV   Úpassúupdate\(\) is deprecatedÚtest)r   r:   rW   rB   rE   Úset_passwordrF   rC   rD   Ú	sample_03rG   rI   rZ   ÚupdateÚcheck_passwordr[   r   r   r   Útest_02_set_password¿   s"   ÿÿÿz%HtpasswdFileTest.test_02_set_passwordc                 C   sl   |   ¡ }d}t||ƒ t |¡}| dd¡ |  t|ƒ|¡ tj|ddd}| dd¡ |  t|ƒd¡ d S )Nó   user1:pass1
rS   Úpass2ra   T)rc   r]   s   user1:pass2
)rA   r   r   r:   rj   rC   r
   r^   r   r   r   Útest_02_set_password_autosaveÖ   s   

z.HtpasswdFileTest.test_02_set_password_autosavec                 C   s’   d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                 S   s*   t j| d}| dd¡ |j | d¡¡S )Nrb   rS   Úpass1)r   r:   rj   ÚcontextÚidentifyÚget_hash)ÚschemerM   r   r   r   Úcheckæ   s   zCHtpasswdFileTest.test_02_set_password_default_scheme.<locals>.checkÚsha256_cryptÚ	des_cryptÚxxxÚportableÚportable_apache_22Úhost_apache_22N)rC   rI   ÚKeyErrorr   Úhtpasswd_defaults)rL   rw   r   r   r   Ú#test_02_set_password_default_schemeã   s   z4HtpasswdFileTest.test_02_set_password_default_schemec                 C   sL   t j | j¡}| dd¡ | d¡ | dd¡ |  t| ¡ ƒg d¢¡ dS )útest users()rU   re   Úuser3Úpass3©rS   rT   r‚   Úuser4rU   N)	r   r:   rW   rB   rj   rX   rC   ÚsortedÚusersr[   r   r   r   Útest_03_usersú   s
   
zHtpasswdFileTest.test_03_usersc              	   C   s  t j | j¡}|  t|jdd¡ |  | dd¡du ¡ tddƒD ]0}t	|ƒ}z|  | d| d| ¡¡ |  | d| d¡du ¡ W q  t
yP   |d	krOY q ‚ w |  t|jd
d¡ |  dgd ¡ |  | dd¡¡ |  | dd¡¡ W d  ƒ dS 1 s€w   Y  dS )útest check_password()é   Úpass9Úuser9Né   r1   rg   FÚ5rV   úverify\(\) is deprecatedé   rS   rr   rp   )r   r:   rW   Ú	sample_05rI   Ú	TypeErrorrm   rE   r   Ústrr   rZ   rG   ÚverifyrF   ©rL   rM   Úir   r   r   Útest_04_check_password  s$   ü"þz'HtpasswdFileTest.test_04_check_passwordc                 C   s  |   ¡ }t|dƒ t|dƒ tj|dd}|  | ¡ d¡ | dd¡ | ¡  |  | ¡ d¡ t|| j	ƒ | ¡  |  | ¡ | j	¡ | d	d
¡ | 
¡  |  | ¡ | j	¡ t ¡ }|  t|j
¡ |  t|j¡ t|| jƒ t ¡ }| 
|¡ |  | dd¡¡ dS )útest load()r"   é   ra   rb   r?   rS   rr   ro   rU   re   N)rA   r   r   r   r:   rC   rD   rj   Úload_if_changedrB   ÚloadrI   ÚRuntimeErrorÚ
sample_duprE   rm   ©rL   r   ÚhaÚhbÚhcr   r   r   Útest_05_load  s*   


zHtpasswdFileTest.test_05_loadc                 C   s   |   ¡ }t|| jƒ t |¡}| d¡ | d¡ | ¡  |  t|ƒ| j	¡ tjdd}| 
dd¡ |  t|j¡ | |¡ |  t|ƒd¡ dS )útest save()rS   rT   ra   rb   rr   ro   N)rA   r   rB   r   r:   rX   ÚsaverC   r
   rY   rj   rI   rœ   ©rL   r   rM   r    r   r   r   Útest_06_saveA  s   



zHtpasswdFileTest.test_06_savec                 C   s¸   | j ttjdd tjj| jddd}|  | ¡ tdƒg¡ |  	d¡ tjj| jdd}W d  ƒ n1 s7w   Y  |  | ¡ d	g¡ tjj| j
d
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)rI   rZ   r   r:   rW   Úsample_04_utf8rC   r‡   r   rG   Úsample_04_latin1r[   r   r   r   Útest_07_encodingsW  s   ÿÿ
ÿz"HtpasswdFileTest.test_07_encodingsc                 C   s†   t j | j¡}|  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  d¡ |  | d¡d¡ W d  ƒ dS 1 s<w   Y  dS )útest get_hash()r‚   s!   {SHA}3ipNV1GrBtxPmHFC21fCbVCSXIo=r…   s   pass4rU   Núfind\(\) is deprecated)r   r:   rW   rB   rC   ru   rG   Úfindr[   r   r   r   Útest_08_get_hashk  s   "ÿz!HtpasswdFileTest.test_08_get_hashc                 C   ó<   t j | j¡}|  | ¡ | j¡ t  ¡ }|  | ¡ d¡ dS )ztest to_stringr?   N)r   r:   rW   rB   rC   rD   r[   r   r   r   Útest_09_to_stringu  ó   z"HtpasswdFileTest.test_09_to_stringc                 C   s   t jddddd}t|ƒ d S )NÚfakepathTr­   )r]   r>   r©   )r   r:   Úreprr[   r   r   r   Útest_10_repr€  s   zHtpasswdFileTest.test_10_reprc                 C   ó(   |   ttjjd¡ |   ttjjd¡ d S )Ns   realm:user1:pass1
s   pass1
)rI   rZ   r   r:   rW   ©rL   r   r   r   Útest_11_malformed„  ó   ÿÿz"HtpasswdFileTest.test_11_malformedc                 C   s   | j ttjjdd d d S )Nr?   )r   )rI   r’   r   r:   rW   r¼   r   r   r   Útest_12_from_stringŠ  s   
ÿz$HtpasswdFileTest.test_12_from_stringc                 C   s²   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

)rS   rT   r…   rU   Úuser7r…   Úalthash4Úuser6Úalthash6)rS   rT   r…   rU   rÂ   rÀ   rÀ   )rS   rT   r…   rU   rÂ   zd
user2:pass2
user4:althash4
 	 
user1:pass1
 # legacy users
#user6:pass6
user5:pass5
user6:althash6
N)
r   r   r:   rW   rC   r†   r‡   Úset_hashrX   rD   )rL   ÚsourcerM   Útargetr   r   r   Útest_13_whitespace  s   ÿ
ÿz#HtpasswdFileTest.test_13_whitespacec                    s  |   ¡ }tj|dd‰ ‡ fd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   r>   c                    ó   ˆ j  |¡ | ¡S rO   ©rs   ÚhandlerÚhash©Úpwdrv   ©rM   r   r   Úhash_schemeÆ  ó   z>HtpasswdFileTest.test_htpasswd_cmd_verify.<locals>.hash_schemerS   r2   Úapr_md5_cryptr}   rT   Úhostr‚   r…   z$xxx$foo$bar$bazÚwrongN)	rA   r   r:   rÄ   r   r¤   rF   r3   rE   )rL   r   rÐ   Úhost_no_bcryptÚ	host_bestr   rÏ   r   Útest_htpasswd_cmd_verify¾  s"   

z)HtpasswdFileTest.test_htpasswd_cmd_verifyÚbcryptzbcrypt support requiredc                    s~   |   ¡ }tj|dd‰ ‡ fdd„}ˆ  d|ddƒ¡ ˆ  ¡  |  t|ddƒ¡ tr4|  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                    rÉ   rO   rÊ   rÍ   rÏ   r   r   rÐ   î  rÑ   zEHtpasswdFileTest.test_htpasswd_cmd_verify_bcrypt.<locals>.hash_schemerS   r2   rØ   rÔ   N)	rA   r   r:   rÄ   r¤   rF   r3   ÚHAVE_HTPASSWD_BCRYPTrE   )rL   r   rÐ   r   rÏ   r   Útest_htpasswd_cmd_verify_bcryptã  s   	z0HtpasswdFileTest.test_htpasswd_cmd_verify_bcryptN)%Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚdescriptionPrefixrB   rY   rk   r®   r¯   r   r‘   rN   rQ   r\   r`   rn   rq   r€   rˆ   r—   r¢   r¦   r°   r´   r¶   rº   r½   r¿   rÇ   Úrequires_htpasswd_cmdr×   r   Ú
skipUnlessr   Úhas_backendrÚ   r   r   r   r   r9   Z   sB    "%
/
$r9   c                   @   s   e Zd ZdZdZdZdZdZdZdZ	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd 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                 C   sl   |   ¡ }t|| jƒ t |¡}|  | ¡ | j¡ tj|dd}|  | ¡ d¡ t |¡ |  	t
tj|¡ dS )r;   Tr=   r?   N)rA   r   rB   r   rä   rC   rD   r   rH   rI   rJ   rK   r   r   r   rN     s   

z-HtdigestFileTest.test_00_constructor_autoloadc                 C   s   t j | j¡}|  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  | ¡ | j	¡ |  
t|jdd¡ |  
t|jdd	¡ d
S )rR   rS   ÚrealmrT   rU   r‚   Úrealm5rV   r1   úrealm:N)r   rä   rW   rB   rE   rX   rF   rC   rD   rY   rI   rZ   r[   r   r   r   r\   +  s   zHtdigestFileTest.test_01_deletec                 C   s”   |   ¡ }t|| jƒ t |¡}|  | dd¡¡ |  | dd¡¡ |  | dd¡¡ |  t	|ƒ| j¡ d|_
|  | dd¡¡ |  t	|ƒ| j¡ d S )NrS   rå   r‚   ræ   rU   TrT   )rA   r   rB   r   rä   rE   rX   rF   rC   r
   r]   rY   rK   r   r   r   r`   :  s   
z(HtdigestFileTest.test_01_delete_autosavec                 C   s  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¡ | ddd¡ W d  ƒ n1 s|w   Y  |  | dd¡¡ dS )ztest update()rT   rå   rd   rU   re   rƒ   Úrealm2rV   rg   Á   uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuur1   rç   Á   rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrh   ri   N)r   rä   rW   rB   rE   rj   rF   rC   rD   rk   rI   r’   Údefault_realmrm   rZ   rG   rl   r[   r   r   r   rn   H  s    ÿz%HtdigestFileTest.test_02_set_passwordc                 C   sd   t j | j¡}| ddd¡ | dd¡ | ddd¡ |  t| d¡ƒg d¢¡ |  	t
|jd¡ dS )	r   rU   rå   re   r‚   rƒ   r„   rŠ   N)r   rä   rW   rB   rj   rX   rC   r†   r‡   rI   r’   r[   r   r   r   rˆ   d  s   zHtdigestFileTest.test_03_usersc              	   C   sH  t j | j¡}|  t|jddd¡ |  t|jddd¡ |  | ddd¡d¡ tddƒD ]!}t	|ƒ}|  
| d| dd| ¡¡ |  | d| dd¡d	¡ q+|  t|jdd¡ d|_|  
| d
d¡¡ |  | dd¡d¡ |  dgd ¡ |  
| d
dd¡¡ |  | d
dd¡¡ W d  ƒ n1 s“w   Y  |  t|jddd¡ dS )r‰   rŠ   rå   re   r1   rU   Nr™   rg   FrS   rr   r   r   rp   rV   )r   rä   rW   rB   rI   r’   rm   ÚassertIsr   r“   rE   rë   rG   r”   rF   rZ   r•   r   r   r   r—   n  s"   þz'HtdigestFileTest.test_04_check_passwordc                 C   sN  |   ¡ }t|dƒ t|dƒ t |¡}|  | ¡ d¡ | ddd¡ | ¡  |  | ¡ d¡ t|| j	ƒ | ¡  |  | ¡ | j	¡ | ddd	¡ | 
¡  |  | ¡ | j	¡ t ¡ }|  t|j
¡ |  t|j¡ t ¡ }| 
|¡ |  | ¡ | j	¡ t|ƒ t|dƒ |  d
¡ |j
dd W d  ƒ n1 s˜w   Y  |  | ¡ d¡ dS )r˜   r"   r™   r?   rS   rå   rr   s-   user1:realm:2a6cf53e7d8f8cf39d946dc880b14128
rU   re   z!load\(force=False\) is deprecatedF)ÚforceN)rA   r   r   r   rä   rC   rD   rj   rš   rB   r›   rI   rœ   r   rG   rž   r   r   r   r¢   ‡  s4   




ÿzHtdigestFileTest.test_05_loadc                 C   s–   |   ¡ }t|| jƒ t |¡}| dd¡ | dd¡ | ¡  |  t|ƒ| j	¡ t ¡ }| 
ddd¡ |  t|j¡ | |¡ |  t|ƒ| ¡ ¡ dS )r£   rS   rå   rT   rr   N)rA   r   rB   r   rä   rX   r¤   rC   r
   rY   rj   rI   rœ   rD   r¥   r   r   r   r¦   °  s   

zHtdigestFileTest.test_06_savec                 C   sh   t j | j¡}|  | d¡d¡ |  | ¡ dg¡ |  | d¡d¡ |  | ¡ g ¡ |  | ¡ d¡ dS )ztest realms() & delete_realm()r<   r   rå   é   r?   N)r   rä   rW   rB   rC   Údelete_realmÚrealmsrD   r[   r   r   r   Útest_07_realmsÆ  s   zHtdigestFileTest.test_07_realmsc                 C   sŽ   t j | j¡}|  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ |  d¡ |  | dd¡d¡ W d  ƒ dS 1 s@w   Y  dS )	r±   r‚   rå   Ú a500bb8c02f6a9170ae46af10c898744r…   Ú ab7b5d5f28ccc7666315f508c7358519rU   Nr²   )r   rä   rW   rB   rC   ru   rG   r³   r[   r   r   r   r´   Ñ  s   "ÿz!HtdigestFileTest.test_08_get_hashc                 C   s¢   | j ttjdd tjj| jddd}|  | ¡ tdƒg¡ |  | 	tdƒ¡tdƒg¡ tjj| j
ddd}|  | ¡ tdƒg¡ |  | 	tdƒ¡tdƒg¡ d	S )
ztest encoding parameterr§   r¨   r   Trª   u   realmÃ¦r¬   r­   N)rI   rZ   r   rä   rW   r®   rC   rð   r   r‡   r¯   r[   r   r   r   Útest_09_encodingsÛ  s    z"HtdigestFileTest.test_09_encodingsc                 C   rµ   )ztest to_string()r?   N)r   rä   rW   rB   rC   rD   r[   r   r   r   Útest_10_to_stringê  r·   z"HtdigestFileTest.test_10_to_stringc                 C   r»   )Ns   realm:user1:pass1:other
ro   )rI   rZ   r   rä   rW   r¼   r   r   r   r½   õ  r¾   z"HtdigestFileTest.test_11_malformedN)rÛ   rÜ   rÝ   rÞ   rß   rB   rY   rk   r®   r¯   rN   r\   r`   rn   rˆ   r—   r¢   r¦   rñ   r´   rô   rõ   r½   r   r   r   r   rã      s*    
)
rã   )r   rO   ))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Û   r5   r   ÚenvironÚgetr&   r0   r3   r8   ÚHAVE_HTPASSWDrÙ   rá   rà   r9   rã   r   r   r   r   Ú<module>   s4    


   )