3
NZ.2                 @   s   d dl Z d dlZd dlZd dlZddlmZmZ ddlT ddlm	Z	m
Z
 ddlmZ ddlmZ dZd	d	d	d	d	d	d	d	d	d	d
d	d	d	d	d	d	d	d
d
d
d	d	dZdd Zdd ZG dd deZdS )    N   )utilstui)*)BytesIOStringIO)input)pexpect   susudo)ZmepisZdebiansuseZmandrivaZfedoraZredhatrhelZ	slackwareZgentooZredflagZubuntuZxandrosZfreebsdZlinspireZarkZ	pclinuxosZcentosZigosZ	linuxmintZlinpusZgosZbossZlfsc             C   s@   dd l }td td ttj|  td}|j d}||fS )Nr    z
Username: z
Password: )getpassprintlogboldr   )promptr   usernamepassword r   !/usr/share/hplip/base/password.pyshowPasswordPrompt=   s    
r   c              C   s   d } ydd l }|j d } W n tk
r4   d } Y nX | sXtjd}|j j } |j  | sztjd}|j j } |j  | j } d| krd} nd| krd} | S )Nr   zlsb_release -i | cut -f 2z-cat /etc/issue | awk '{print $1}' | head -n 1Zredhatenterpriser   r   )	platformZdistImportErrorospopenreadstripcloselower)Zos_namer   namer   r   r   get_distro_nameJ   s(    


r#   c               @   s   e Zd ZefddZdd Zdd Zdd Zd$d
dZd%d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d Zd!d" Zd#S )(Passwordc             C   sV  d| _ d| _d| _|| _| j  g | _tjtj	ddd rptjtj	ddd  rptjtj	dddrpd| _
ntjtj	ddd rtjtj	ddd rtjtj	dddrd| _
nFtjtj	ddd rtjtj	ddd rtjtj	dddrd| _
xRtjD ]H}ytj|tj}W n" tk
r>   | jj| Y nX | jj| qW d S )Nr   FZ	configureqt50qt4qt3)_Password__password_Password__password_prompt_str_Password__passwordValidated_Password__mode_Password__readAuthType_Password__expectListr   Zto_boolZsys_confget_Password__ui_toolkitEXPECT_WORD_LISTrecompileI	TypeErrorappend)selfZModespr   r   r   __init__h   s$    B@@zPassword.__init__c             C   sj   t  j }tjddd| _| jdkrf| jdkrfyt| | _W n( tk
rd   tjd|  d| _Y nX d S )Nauthenticationsu_sudor   r   r   z$%s distro is not found in AUTH_TYPES)	r#   r!   	user_confr/   _Password__authType
AUTH_TYPESKeyErrorr   warn)r7   distro_namer   r   r   Z__readAuthType   s    
zPassword.__readAuthTypec             C   s    | j dkrdS dtjd S d S )Nr   z*Please enter the root/superuser password: z)Please enter the sudoer (%s)'s password: USER)r>   r   getenv)r7   r   r   r   Z__getPasswordDisplayString   s    
z#Password.__getPasswordDisplayStringc             C   s,   | j dkrd| _ nd| _ tjdd| j  d S )Nr   r   r;   r<   )r>   r=   set)r7   r   r   r   Z__changeAuthType   s    
zPassword.__changeAuthTyper   c             C   s6   |dkr&| j dkrd}ndtjd }tjtj|S )Nr   r   z*Please enter the root/superuser password: z)Please enter the sudoer (%s)'s password: rC   )r>   r   rD   r   r   r   )r7   pswd_msgr   r   r   Z__get_password   s
    
zPassword.__get_passwordrootc             C   s   |dkrd}| j dkr4ddlm} |||d\}}nD| j dkr\ddlm} |||d\}}nddlm} |||d\}}|dkr|dkrtd|S )	Nr   ziYour HP Device requires to install HP proprietary plugin
Please enter root/superuser password to continuer(   r   )showPasswordUIFr%   zUser Cancel)r0   ui.setupformrH   ui5.setupdialogui4.setupdialog	Exception)r7   rF   userrH   r   r   r   r   r   Z__get_password_ui   s    

zPassword.__get_password_uir   c          (   C   s  dd l }|j }d\}}ytj||d}W n tjk
r@   dS X zZy tj }xt  |j| j}	|j	}
|
rtj }|j
|
 |	dkrd|j  }}P qV|	dkr.d|ko| jdkrV|
jdd	}
|
jd
d}
|
| _ytj|
tj}W n" tk
r   | jj|
 Y nX | jj| tjd| j  qVqV| jdkrVtj|	 | _tjd| j  |j| j qVW W n2 ttjfk
r } ztj  W Y d d }~X nX W d t  y|j  W n tk
r   Y nX X |r|j|fS dS d S )Nr   Fr   )timeoutr   Ttrue[z\[]z\]z*Adding missing password prompt string [%s]z$Updating password prompt string [%s])Fr   )r   r   )r   r   )ior   r	   ZspawnuZExceptionPexpecttimeZupdate_spinnerZexpectr.   Zbeforewritegetvaluer*   replacer2   r3   r4   r5   r6   r   debugr   r1   Zsendliner)   rL   Z	exceptionZcleanup_spinnerr    OSErrorZ
exitstatus)r7   cmdrN   rR   outputokZretZchildstarticbr9   er   r   r   Z__password_check   s\    


zPassword.__password_checkc       	      C   s  d}x| j tkr | j|| _ndy4| j dkr>| j|d| _n| j|tjd| _W n. tk
r } zt	j
| P W Y d d }~X nX | j d }t	j
| | j|\}}t	j
d||f  | j tkr| jdkrdd	lm} n0| jd
krdd	lm} n| jdkrdd	lm} |dkr"d| _P qd|krb| j  d}| j tkrN|| n
t	j| tdqd| _|d7 }| j tkr|tkr|d d S |dtd |   q|tkrt	jd d S t	jdtd |   qW d S )Nr   r   rG   rC   rO   zstatus = %s  output=%s r'   r   )FailureMessageUIr%   r(   Tznot in the sudoers filezLUser doesn't have sudo permissions.
Changing Authentication Type. Try again.z User is not in the sudoers file.r   zPassword incorrect. z'Password incorrect. %d attempt(s) left.)r,   INTERACTIVE_MODE_Password__get_passwordr)   getAuthType_Password__get_password_uir   rD   rL   r   rW   
getAuthCmd_Password__password_checkZGUI_MODEr0   rK   r`   rJ   rI   r+   _Password__changeAuthTypeerrorPASSWORD_RETRY_COUNT)	r7   rF   xexrY   ZstatusrZ   r`   msgr   r   r   Z__validatePassword   sV    












zPassword.__validatePasswordc             C   s$   | j dkrd\}}nd\}}||fS )Nr   
su -c "%s"r   sudo %s)r   rm   )r   rn   )r>   )r7   AuthTypeAuthCmdr   r   r   Z__get_password_utils;  s    

zPassword.__get_password_utilsc             C   s.   t  j }| jdkrd\}}nd\}}||fS )Nr   sudo %sr   
su -c "%s")r   rq   )r   rr   )r#   r!   r>   )r7   rB   ro   rp   r   r   r   Z__get_password_utils_uiD  s
    


z Password.__get_password_utils_uic             C   s.   t jd d| _d| _| jdkr*tjd d S )NzClearing password...r   Fr   zsudo -K)r   rW   r)   r+   r>   r   Zrun)r7   r   r   r   clearPasswordZ  s
    

zPassword.clearPasswordc             C   s"   | j tkr| j}n| j \}}|S )N)r,   ra   r>    _Password__get_password_utils_ui)r7   ZretValuerp   r   r   r   rc   b  s    
zPassword.getAuthTypec             C   s(   | j tkr| j \}}n| j \}}|S )N)r,   ra   _Password__get_password_utilsrt   )r7   ro   rp   r   r   r   re   k  s    
zPassword.getAuthCmdr   c             C   s&   | j r| jS |r| jS | j| | jS )N)r+   r)   _Password__validatePassword)r7   rF   Zpsswd_queried_cntr   r   r   getPasswordt  s    
zPassword.getPasswordc             C   s   | j S )N)r*   )r7   r   r   r   getPasswordPromptString~  s    z Password.getPasswordPromptStringN)r   )r   rG   )r   )r   r   )__name__
__module____qualname__ra   r:   r-   Z#_Password__getPasswordDisplayStringrg   rb   rd   rf   rv   ru   rt   rs   rc   re   rw   rx   r   r   r   r   r$   g   s   



D<			

r$   )r   r   rS   stringr   r   r   gZsixextr   r   Zsixext.movesr   r	   ri   r?   r   r#   objectr$   r   r   r   r   <module>   sF   