
­­­­­­­­­­­­­­­­­­
<!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re  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	rt|d t|  |j|| d
}qW |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rt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.zThe 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rttd d
S x|D ]}| j j|rdS qW 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rd}xV|j D ]J\}}| jj|sq| jj|}|r|j| qx||kr|j| qW qW | 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rwZ|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 st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