U
    ¯Ad»  ã                   @   sp   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mZ e 	e
¡ZG dd„ dejjjƒZG dd„ deƒZdS )é    N)Úlog)ÚsubpÚutilc                       sv   e Zd ZdZdZdgZ‡ fdd„Zdd„ Zdd	„ Zddd„Z	dd„ Z
dd„ Zdd„ Zddd„Zdd„ Zdd„ Z‡  ZS )ÚNetBSDzS
    Distro subclass for NetBSD.

    (N.B. OpenBSD inherits from this class.)
    z*/usr/pkg/etc/sudoers.d/90-cloud-init-usersZgroupaddc                    sd   t ƒ  |||¡ tj d¡rNdddg| _dddg| _dddg| _dddg| _ndd	g| _d
g| _d S )Nz/usr/pkg/bin/pkginZpkginz-yÚinstallÚremoveÚupdatezfull-upgradeZpkg_addz-UZ
pkg_delete)	ÚsuperÚ__init__ÚosÚpathÚexistsZpkg_cmd_install_prefixZpkg_cmd_remove_prefixZpkg_cmd_update_prefixZpkg_cmd_upgrade_prefix)ÚselfÚnameZcfgÚpaths©Ú	__class__© ú:/usr/lib/python3/dist-packages/cloudinit/distros/netbsd.pyr
      s    
zNetBSD.__init__c                 C   s   dd||gS )NÚusermodú-Gr   )r   Úmember_nameZ
group_namer   r   r   Ú_get_add_member_to_group_cmd%   s    z#NetBSD._get_add_member_to_group_cmdc           
      K   sN  t  |¡rt d|¡ dS dg}dg}dddddd	œ}d
dddœ}| ¡ D ]Z\}}||kr||r|t|tƒr|| || |g¡ qJ||krJ|rJ| || ¡ | || ¡ qJd|ks¶d|krÊ|dg7 }|dg7 }||g7 }||g7 }t d|¡ zt	j	||d W n& t
k
r"   t  td|¡ ‚ Y nX | dd ¡}	|	d k	rJ| j||	dd d S )Nz!User %s already exists, skipping.FZuseraddz-dz-cz-gr   z-s)ZhomedirZgecosZprimary_groupÚgroupsÚshellz--no-user-groupz--systemz--no-log-init)Zno_user_groupÚsystemZno_log_initZno_create_homer   z-mzAdding user %s)Z	logstringzFailed to create user %sÚpasswdT)Úhashed)r   Zis_userÚLOGÚinfoÚitemsÚ
isinstanceÚstrÚextendÚappendr   Ú	ExceptionÚlogexcÚgetÚ
set_passwd)
r   r   ÚkwargsZadduser_cmdZlog_adduser_cmdZadduser_optsZadduser_flagsÚkeyÚvalZ
passwd_valr   r   r   Úadd_user(   sF    
ûý




zNetBSD.add_userFc                 C   sl   |r
|}nt j}t   |t  |¡¡}zt dd||g¡ W n$ tk
r\   t td|¡ ‚ Y nX |  |¡ d S )Nr   z-pzFailed to set password for %s)	ÚcryptZMETHOD_BLOWFISHZmksaltr   r%   r   r&   r   Úunlock_passwd)r   Úuserr   r   Z	hashed_pwÚmethodr   r   r   r(   Y   s    zNetBSD.set_passwdc                 C   s>   zt   dd|g¡ W n$ tk
r8   t td|¡ ‚ Y nX d S )Nr   z-Fz"Failed to set pw expiration for %s©r   r%   r   r&   r   )r   r/   r   r   r   Úforce_passwd_changeg   s
    zNetBSD.force_passwd_changec                 C   s@   zt   ddd|g¡ W n$ tk
r:   t td|¡ ‚ Y nX d S )Nr   ú-CZyeszFailed to lock user %sr1   ©r   r   r   r   r   Úlock_passwdn   s
    zNetBSD.lock_passwdc                 C   s@   zt   ddd|g¡ W n$ tk
r:   t td|¡ ‚ Y nX d S )Nr   r3   ZnozFailed to unlock user %sr1   r4   r   r   r   r.   u   s
    zNetBSD.unlock_passwdNc                 C   s   t  d¡ d S )NzCannot set the locale.)r   Údebug)r   ZlocaleZout_fnr   r   r   Úapply_locale|   s    zNetBSD.apply_localec                 C   s.   t  ¡ }t  ¡ }tj ¡ }d||f |d< |S )z9Return env vars used in NetBSD package_command operationsz:http://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/%s/%s/AllZPKG_PATH)ÚplatformÚreleaseÚmachiner   ÚenvironÚcopy)r   Z
os_releaseZos_archÚer   r   r   Ú_get_pkg_cmd_environ   s    
þþÿzNetBSD._get_pkg_cmd_environc                 C   s   d S )Nr   )r   r   r   r   Úupdate_package_sourcesŒ   s    zNetBSD.update_package_sources)F)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Zci_sudoers_fnZgroup_add_cmd_prefixr
   r   r,   r(   r2   r5   r.   r7   r>   r?   Ú__classcell__r   r   r   r   r      s   1

r   c                   @   s   e Zd ZdS )ÚDistroN)r@   rA   rB   r   r   r   r   rE      s   rE   )r-   r   r8   Zcloudinit.distros.bsdZ	cloudinitr   Zloggingr   r   Z	getLoggerr@   r   ZdistrosZbsdZBSDr   rE   r   r   r   r   Ú<module>   s   
 