509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ŸØ*e)V  ã               @   sº   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 ejZdd„ ZG dd„ dƒZG d	d
„ d
ƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZdd„ Zedkr¶eƒ  dS )é    N)ÚOptions)ÚEnvironmentFile)ÚConfigSnippetc              O   s   t | dtji|—Ž d S )NÚfile)ÚprintÚsysÚstderr)ÚargsÚkwargs© r   ú /usr/lib/python3.6/authcompat.pyÚeprint%   s    r   c               @   s"   e Zd ZdZddd„Zdd„ ZdS )	ÚCommandFNTc             C   s2   |g| | _ |d k	r|jƒ nd | _|| _d | _d S )N)r	   ÚencodeÚinputÚcheckÚresult)ÚselfÚcommandr	   r   r   r   r   r   Ú__init__,   s    zCommand.__init__c             C   sF   t tdƒdj| jƒ ƒ | jr"d S tj| j| j| jtj	tj	d�| _
d S )NzExecuting: %sú )r   r   Ústdoutr   )r   Ú_Újoinr	   ÚTESTÚ
subprocessÚrunr   r   ÚPIPEr   )r   r   r   r   r   2   s    zCommand.run)NT)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   )   s   
r   c               @   s>   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zdd„ ZdS )ÚServicec             C   s   |d | _ d S )Nz.service)Úname)r   r"   r   r   r   r   ?   s    zService.__init__c             C   sŽ   y|j ƒ  W n| tjk
rˆ } z^|rB|j|krBttdƒ| j ƒ n6|j|krxttdƒdj|jƒ|jf ƒ t|j	j
ƒ ƒ W Y d d }~X nX d S )Nz5Service %s was not found. Please install the service.z$Command [%s] failed with %d, stderr:r   )r   r   ÚCalledProcessErrorÚ
returncoder   r   r"   r   Úcmdr   Údecode)r   r   ÚrequiredZenoent_coder   r   r   r   Ú
runsystemdB   s    
zService.runsystemdc             C   s(   t tjdƒd| jgƒ}| j|ddƒ d S )Nzcmd-systemctlÚenableTé   )r   ÚPathÚSystemr"   r(   )r   r%   r   r   r   r)   N   s    zService.enablec             C   s(   t tjdƒd| jgƒ}| j|ddƒ d S )Nzcmd-systemctlÚdisableFr*   )r   r+   r,   r"   r(   )r   r%   r   r   r   r-   R   s    zService.disableTc             C   s4   |r| j ƒ  ttjdƒd| jgƒ}| j|ddƒ d S )Nzcmd-systemctlÚstartTé   )Ústopr   r+   r,   r"   r(   )r   ÚRestartr%   r   r   r   r.   V   s    zService.startc             C   s(   t tjdƒd| jgƒ}| j|ddƒ d S )Nzcmd-systemctlr0   Fr/   )r   r+   r,   r"   r(   )r   r%   r   r   r   r0   \   s    zService.stopN)T)	r   r   r    r   r(   r)   r-   r.   r0   r   r   r   r   r!   >   s   
r!   c               @   sb   e Zd ZejjejjeƒƒZe	ed ƒZ
dddddddd	d
ddddœZedd„ ƒZedd„ ƒZdS )r+   z/authcompat_pathsz/etc/openldap/ldap.confz$/etc/krb5.conf.d/authconfig-krb.confz%/etc/sssd/conf.d/authconfig-sssd.confz/etc/sysconfig/authconfigz/etc/sysconfig/networkz;/etc/security/pwquality.conf.d/10-authconfig-pwquality.confz/etc/yp.confz/usr/bin/systemctlz/usr/bin/authselectz/usr/sbin/realmz/usr/bin/domainnamez/usr/sbin/setsebool)z	ldap.confz	krb5.confz	sssd.confÚ
authconfigÚnetworkzpwquality.confzyp.confzcmd-systemctlzcmd-authselectz	cmd-realmzcmd-domainnamezcmd-setseboolc             C   s   dt j| f S )Nz%s/%s)r+   ÚLocalDir)Úrelpathr   r   r   ÚLocalt   s    z
Path.Localc             C   s
   t j|  S )N)r+   ÚFiles)r"   r   r   r   r,   x   s    zPath.SystemN)r   r   r    ÚosÚpathÚdirnameÚrealpathÚ__file__r4   r   ZConfigr7   Ústaticmethodr6   r,   r   r   r   r   r+   a   s    r+   c               @   sœ   e Zd ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZ	G dd„ deƒZ
G dd„ deƒZG dd„ deƒZdS )ÚConfigurationc               @   sx   e Zd Zd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d„Zdd„ ZdS )zConfiguration.BaseNc             C   s"   || _ d | _|d k	rt|ƒ| _d S )N)ÚoptionsÚservicer!   )r   r?   ÚServiceNamer   r   r   r      s    zConfiguration.Base.__init__c             C   s   dS )NTr   )r   r   r   r   Ú	isEnabled…   s    zConfiguration.Base.isEnabledc             C   s
   | j ƒ  S )N)rB   )r   r   r   r   Ú
isDisabledˆ   s    zConfiguration.Base.isDisabledc             C   s*   | j d krd S | j jƒ  |s&| j jƒ  d S )N)r@   r)   r.   )r   Únostartr   r   r   ÚenableService‹   s
    

z Configuration.Base.enableServicec             C   s*   | j d krd S | j jƒ  |s&| j jƒ  d S )N)r@   r-   r0   )r   Únostopr   r   r   ÚdisableService”   s
    

z!Configuration.Base.disableServicec             C   s   d S )Nr   )r   r   r   r   Úcleanup�   s    zConfiguration.Base.cleanupc             C   s   d S )Nr   )r   r   r   r   Úwrite    s    zConfiguration.Base.writec             C   s   | j j|ƒS )N)r?   Úget)r   r"   r   r   r   rJ   £   s    zConfiguration.Base.getc             C   s   | j j|ƒS )N)r?   Úisset)r   r"   r   r   r   rK   ¦   s    zConfiguration.Base.issetc             C   s   | j j|ƒS )N)r?   ÚgetTrueOrNone)r   r"   r   r   r   rL   ©   s    z Configuration.Base.getTrueOrNonec             C   s   | j j|ƒS )N)r?   ÚgetBool)r   r"   r   r   r   rM   ¬   s    zConfiguration.Base.getBoolFc             C   s*   |r| j |ƒ rd S | j|ƒ}|r&|S |S )N)rK   rM   )r   r"   Zif_trueZif_falseÚ	AllowNoneÚvaluer   r   r   ÚgetBoolAsValue¯   s    
z!Configuration.Base.getBoolAsValuec             C   sH   t tdƒ| ƒ | jjdƒr d S ytj|ƒ W n tk
rB   d S X d S )NzRemoving file: %sz	test-call)r   r   r?   rM   r8   ÚremoveÚFileNotFoundError)r   Úfilenamer   r   r   Ú
removeFile¹   s    zConfiguration.Base.removeFile)N)F)r   r   r    r   rB   rC   rE   rG   rH   rI   rJ   rK   rL   rM   rP   rT   r   r   r   r   ÚBase~   s   
		

rU   c                   s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )zConfiguration.LDAPc                s   t tj| ƒj|ƒ d S )N)Úsuperr>   ÚLDAPr   )r   r?   )Ú	__class__r   r   r   Ä   s    zConfiguration.LDAP.__init__c             C   sZ   t tjdƒdddd�}| jdƒr2|jd| jdƒƒ | jdƒrN|jd	| jdƒƒ |jƒ  d S )
Nz	ldap.confr   z\s\tF)Zdelimiter_reZquotesÚ
ldapserverZURIÚ
ldapbasednZBASE)r   r+   r,   rK   ÚsetrJ   rI   )r   Úconfigr   r   r   rI   Ç   s    


zConfiguration.LDAP.write)r   r   r    r   rI   Ú__classcell__r   r   )rX   r   rW   Ã   s   rW   c                   s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	zConfiguration.Kerberosc                s   t tj| ƒj|ƒ d S )N)rV   r>   ÚKerberosr   )r   r?   )rX   r   r   r   Ó   s    zConfiguration.Kerberos.__init__c             C   s4   | j dƒ r| j dƒ rd S | jdƒdkp2| jdƒS )NÚ	krb5realmÚkrb5realmdnsÚ )rK   rJ   rM   )r   r   r   r   rB   Ö   s    z Configuration.Kerberos.isEnabledc             C   s0   | j dƒ r| j dƒ rd S | jtjdƒƒ d S )Nr_   r`   z	krb5.conf)rK   rT   r+   r,   )r   r   r   r   rH   Ü   s    zConfiguration.Kerberos.cleanupc             C   sŠ   | j ƒ rd S tjdƒ}t|tjdƒƒ}| jdƒ}| jdƒ| jdƒ| jdƒ|rV| jdƒnd |rf| jdƒnd |rt|jƒ nd dœ}|j|ƒ d S )	Nzsnippets/authconfig-krb.confz	krb5.confr_   Z
krb5kdcdnsr`   Úkrb5kdcÚkrb5adminserver)Úrealmzkdc-srvz	realm-srvZkdcZadminserverZdomain)rC   r+   r6   r   r,   rJ   ÚlowerrI   )r   r9   r\   rd   Úkeysr   r   r   rI   ã   s    

zConfiguration.Kerberos.write)r   r   r    r   rB   rH   rI   r]   r   r   )rX   r   r^   Ò   s   r^   c                   s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )zConfiguration.Networkc                s   t tj| ƒj|ƒ d S )N)rV   r>   ÚNetworkr   )r   r?   )rX   r   r   r   ÷   s    zConfiguration.Network.__init__c             C   s<   | j dƒ}ttjdƒƒ}|d kr$d S |jd|ƒ |jƒ  d S )NÚ	nisdomainr3   Z	NISDOMAIN)rJ   r   r+   r,   r[   rI   )r   rh   r\   r   r   r   rI   ú   s    
zConfiguration.Network.write)r   r   r    r   rI   r]   r   r   )rX   r   rg   ö   s   rg   c                   s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	zConfiguration.SSSDc                s   t tj| ƒj|dd� d S )NÚsssd)rA   )rV   r>   ÚSSSDr   )r   r?   )rX   r   r   r     s    zConfiguration.SSSD.__init__c             C   s0   | j dƒ r| j dƒ rd S | jdƒp.| jdƒS )NÚldapri   )rK   rM   )r   r   r   r   rB     s    zConfiguration.SSSD.isEnabledc             C   s   | j tjdƒƒ d S )Nz	sssd.conf)rT   r+   r,   )r   r   r   r   rH     s    zConfiguration.SSSD.cleanupc             C   s¬   | j dƒsd S tjdƒ}t|tjdƒƒ}| j dƒr6dnd }| jdƒ| jdƒ| jdƒ|| jdƒ| jd	ƒ| jd
ƒ| jdƒ| jdƒ| jdƒdœ
}|j|ƒ tj	tjdƒdd� d S )Nrk   zsnippets/authconfig-sssd.confz	sssd.confZ
rfc2307bisrY   rZ   ZldaptlsÚkrb5rb   rc   r_   Z
cachecredsÚ	smartcard)
zldap-urizldap-basednzldap-tlszldap-schemarl   zkdc-urizkpasswd-urird   zcache-credsz	cert-authi€  )Úmode)
rM   r+   r6   r   r,   rJ   rL   rI   r8   Úchmod)r   r9   r\   Zschemarf   r   r   r   rI     s"    


zConfiguration.SSSD.write)r   r   r    r   rB   rH   rI   r]   r   r   )rX   r   rj     s   rj   c                   s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )zConfiguration.Winbindc                s   t tj| ƒj|dd� d S )NÚwinbind)rA   )rV   r>   ÚWinbindr   )r   r?   )rX   r   r   r   .  s    zConfiguration.Winbind.__init__c             C   s0   | j dƒ r| j dƒ rd S | jdƒp.| jdƒS )Nrp   Úwinbindauth)rK   rM   )r   r   r   r   rB   1  s    zConfiguration.Winbind.isEnabledc             C   sÂ   | j dƒsd S | jjdƒjddƒ}|d }d }t|ƒdkrF|d d }ddd| d	d
g}| j dƒrr|j| jdƒƒ ttjdƒ||d�}y|j	ƒ  W n* t
k
r¼   ttdƒtjdƒ ƒ Y nX d S )NZwinbindjoinú%r*   r   Ú
r   z-Uz"%s"z--client-softwarerp   Zsmbworkgroupz	cmd-realm)r   z)%s was not found. Please, install realmd.)rK   r?   rJ   ÚsplitÚlenÚappendr   r+   r,   r   rR   r   r   )r   ZcredsÚuserZpasswordr	   r%   r   r   r   rI   7  s$    

zConfiguration.Winbind.write)r   r   r    r   rB   rI   r]   r   r   )rX   r   rq   -  s   rq   c                   s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )zConfiguration.PWQualityc                s   t tj| ƒj|ƒ d S )N)rV   r>   Ú	PWQualityr   )r   r?   )rX   r   r   r   S  s    z Configuration.PWQuality.__init__c             C   sÊ   t tjdƒƒ}d}| jdƒ| jdƒ| jdƒ| jdƒ| jddd	d
d�| jddd	d
d�| jddd	d
d�| jddd	d
d�dœ}x@|jƒ D ]4\}}|d k	r‚t|d t|ƒ ƒ |j||ƒ d
}q‚W |rÆ|j	ƒ  d S )Nzpwquality.confFZ
passminlenZpassminclassZpassmaxrepeatZpassmaxclassrepeatZreqlowerr*   r   T)rN   ZrequpperZreqdigitZreqother)ZminlenZminclassZ	maxrepeatZmaxclassrepeatZlcreditZucreditZdcreditZocreditú=éÿÿÿÿr{   r{   r{   )
r   r+   r,   rJ   rP   Úitemsr   Ústrr[   rI   )r   r\   Z	value_setZpwoptsÚoptrO   r   r   r   rI   V  s"    zConfiguration.PWQuality.write)r   r   r    r   rI   r]   r   r   )rX   r   ry   R  s   ry   c                   s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )zConfiguration.MakeHomedirc                s   t tj| ƒj|dd� d S )NZoddjobd)rA   )rV   r>   ÚMakeHomedirr   )r   r?   )rX   r   r   r   p  s    z"Configuration.MakeHomedir.__init__c             C   s   | j dƒsd S | jdƒS )NÚ	mkhomedir)rK   rM   )r   r   r   r   rB   s  s    
z#Configuration.MakeHomedir.isEnabledc             C   s   d S )Nr   )r   rF   r   r   r   rG   y  s    z(Configuration.MakeHomedir.disableService)r   r   r    r   rB   rG   r]   r   r   )rX   r   r   o  s   r   c                   s<   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Z‡  ZS )zConfiguration.NISc                s*   t tj| ƒj|ƒ tdƒ| _tdƒ| _d S )NÚrpcbindÚypbind)rV   r>   ÚNISr   r!   r�   r‚   )r   r?   )rX   r   r   r     s    
zConfiguration.NIS.__init__c             C   s   | j dƒsd S | jdƒS )NÚnis)rK   rM   )r   r   r   r   rB   „  s    
zConfiguration.NIS.isEnabledc             C   sˆ   | j dƒsd S | jdƒ}|s6ttjdƒ|gƒ}|jƒ  ttjdƒdddgƒ}|jƒ  | jjƒ  | jjƒ  |s„| jj	dd� | jj	ƒ  d S )	Nrh   zcmd-domainnamezcmd-setseboolz-PÚallow_ypbindÚ1F)r1   )
rK   rJ   r   r+   r,   r   r�   r)   r‚   r.   )r   rD   Znisdomr%   r   r   r   rE   Š  s    




zConfiguration.NIS.enableServicec             C   sl   |st tjdƒdgƒ}|jƒ  t tjdƒdddgƒ}|jƒ  | jjƒ  | jjƒ  |sh| jjƒ  | jjƒ  d S )Nzcmd-domainnamez(none)zcmd-setseboolz-Pr…   Ú0)r   r+   r,   r   r�   r-   r‚   r0   )r   rF   r%   r   r   r   rG   Ÿ  s    



z Configuration.NIS.disableServicec          	   C   sÞ   | j dƒsd S d| jdƒ }g }| j dƒr\| jdƒjdƒ}|dd … }|d|d  d 7 }n|d	7 }x|D ]}|d
| d 7 }qjW tjdƒ}| jdƒrºtd| ƒ t|ƒ td| ƒ d S t|dƒ�}|j|ƒ W d Q R X d S )Nrh   zdomain Z	nisserverú,r*   z server r   rt   z broadcast
z	ypserver zyp.confz	test-callz+========== BEGIN Content of [%s] ==========z,========== END   Content of [%s] ==========
Úw)	rK   rJ   ru   r+   r,   rM   r   ÚopenrI   )r   ÚoutputZadditional_serversZserversZserverrS   Úfr   r   r   rI   ¯  s&    




zConfiguration.NIS.write)	r   r   r    r   rB   rE   rG   rI   r]   r   r   )rX   r   rƒ   ~  s
   rƒ   N)r   r   r    ÚobjectrU   rW   r^   rg   rj   rq   ry   r   rƒ   r   r   r   r   r>   }   s   E$)%r>   c               @   sL   e 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S )Ú
AuthCompatc             C   sB   t tjdƒƒ| _tƒ | _| jjƒ  | jj| jƒ | jj| jƒ d S )Nr2   )	r   r+   r,   Ú	sysconfigr   r?   ÚparseZapplysysconfigZupdatesysconfig)r   r   r   r   r   Ì  s
    
zAuthCompat.__init__c             C   sp   t tdƒƒ t tdƒƒ t tdƒƒ t tdƒƒ | jjƒ }|rdt tdƒƒ x|D ]}t d| ƒ qPW t dƒ d S )Nz&Running authconfig compatibility tool.z¬The purpose of this tool is to enable authentication against chosen services with authselect and minimum configuration. It does not provide all capabilities of authconfig.
zLIMPORTANT: authconfig is replaced by authselect, please update your scripts.zHSee man authselect-migration(7) to help you with migration to authselectzDWarning: These options are not supported anymore and have no effect:z  --%sra   )r   r   r?   ZgetSetButUnsupported)r   r?   r"   r   r   r   ÚprintWarningÔ  s    

zAuthCompat.printWarningc             C   s(   x"t jD ]}td|j|jf ƒ qW d S )Nz%s=%s)r   ZListr   r"   rO   )r   Úoptionr   r   r   ÚprintOptionsæ  s    zAuthCompat.printOptionsc             C   s,   x&| j jƒ D ]}td|j|jf ƒ qW d S )Nz%s=%s)r�   Zgetallr   r"   rO   )r   Úliner   r   r   ÚprintSysconfigê  s    zAuthCompat.printSysconfigc             C   sÄ   ddddg}dddg}| j jdƒ r@tjƒ dkr@ttd	ƒƒ d
S x,|D ]$}| j j|ƒrFttd| ƒƒ d
S qFW | j jdƒ| j jdƒkr–ttdƒƒ d
S x|D ]}| j j|ƒrœdS qœW ttdƒƒ d
S )NZtestZprobeZrestorebackupZrestorelastbackupÚupdateZ	updateallZ	kickstartr   z"authconfig can only be run as rootFzNError: option --%s is no longer supported and we cannot continue if it is set.rp   rr   z@Error: Both --enablewinbind and --enablewinbindauth must be set.Tz*Error: Please, provide --updateall option.)r?   rM   r8   Úgetuidr   r   )r   Z
disallowedr'   r’   r   r   r   ÚcanContinueî  s$    



zAuthCompat.canContinuec       	      C   sZ  ddddddddœ}| j ƒ \}}| jjd	ƒsP| jjd
ƒsP| jjdƒsP| jjdƒrVd}n"| jjdƒrhd}n| jjdƒrxd}|d kr„d}xV|jƒ D ]J\}}| jj|ƒs¤qŽ| jj|ƒ}|rÀ|j|ƒ qŽx||krÖ|j|ƒ qÂW qŽW | jjdƒ�rt| jjdƒƒdk�r|jdƒ n
|jdƒ t	t
|ƒƒ}d|g}|j|ƒ |jdƒ ttjdƒ|ƒ}|jƒ  d S )Nzwith-smartcardzwith-smartcard-requiredzwith-fingerprintzwith-mkhomedirzwith-faillockzwith-pamaccessz	with-krb5)rm   ZrequiresmartcardZfingerprintr€   ZfaillockZ	pamaccessZwinbindkrb5rk   Zldapauthri   Zsssdauthr„   rp   Zsmartcardactionr   zwith-smartcard-lock-on-removalZselectz--forcezcmd-authselect)ÚgetCurrentAuthselectConfigr?   rM   r|   rK   rw   rQ   ÚintrJ   Úlistr[   Úextendr   r+   r,   r   )	r   ÚmapZprofileZfeaturesr’   ZfeatureÚenabledr	   r%   r   r   r   ÚrunAuthselect
  sJ    



zAuthCompat.runAuthselectc             C   s~   t tjdƒdgdd�}|jƒ  |jd ks4|jjdkr<d g fS t tjdƒddgƒ}|jƒ  |jjjdƒjƒ }|d |d	d … fS )
Nzcmd-authselectr   F)r   r   Úcurrentz--rawzutf-8r*   )	r   r+   r,   r   r   r$   r   r&   ru   )r   r%   r    r   r   r   r™   H  s    z%AuthCompat.getCurrentAuthselectConfigc             C   s  t j| jƒt j| jƒt j| jƒt j| jƒt j| jƒt j| jƒt j| jƒt j	| jƒg}xª|D ]¢}|j
ƒ  | jjdƒ}y8|jƒ }|d kr†wZ|r–|j|ƒ n|j|ƒ |jƒ  W qZ tjk
rú } z2ttdƒdj|jƒ|jf ƒ t|jjƒ ƒ W Y d d }~X qZX qZW d S )NrD   z$Command [%s] failed with %d, stderr:r   )r>   rW   r?   rg   r^   rj   rq   ry   r   rƒ   rI   rM   rB   rE   rG   rH   r   r#   r   r   r   r%   r$   r   r&   )r   Zconfigsr\   rD   rž   r   r   r   r   ÚwriteConfigurationU  s.    








zAuthCompat.writeConfigurationN)r   r   r    r   r‘   r“   r•   r˜   rŸ   r™   r¡   r   r   r   r   rŽ   Ë  s   >rŽ   c              C   sþ   yt jt jdƒ W n" t jk
r4   tjjdƒ Y nX tƒ } | jƒ  | j	j
dƒt_| j	j
dƒt_| j	j
dƒt_| jƒ s€tjdƒ y| jƒ  | jƒ  | jjƒ  W nP tjk
rî } z2ttdƒdj|jƒ|jf ƒ t|jjƒ ƒ W Y d d }~X nX tjdƒ d S )Nra   z%Warning: Unsupported locale setting.
z	test-callr*   z$Command [%s] failed with %d, stderr:r   r   )ÚlocaleÚ	setlocaleÚLC_ALLÚErrorr   r   rI   rŽ   r‘   r?   rM   r   r   r   r   r˜   ÚexitrŸ   r¡   r�   r   r#   r   r   r   r%   r$   r&   )Z
authcompatr   r   r   r   Úmainz  s(    
 r§   Ú__main__)r8   r   r¢   Úgettextr   Zauthcompat_Optionsr   Zauthcompat_EnvironmentFiler   Zauthcompat_ConfigSnippetr   r   r   r   r!   r+   r>   rŽ   r§   r   r   r   r   r   Ú<module>   s(   #  P 0