
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
\¼me"  ã               @   sô   U d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZm	Z	 y,d dl
Z
e
jZe je
j
e
jeƒd�ZeW nL eefk
r¾   yd dlmZ ejZW n ek
r¸   dd„ ZY nX Y nX ejeƒZG dd	„ d	ejjjƒZG d
d„ deƒZdS )é    N)ÚAny)ÚsubpÚutil)Úsalt)Úbcryptc             C   s   t dƒ‚dS )z¼Raise when called so that importing this module doesn't throw
            ImportError when this module is not used. In this case, crypt
            and passlib are not needed.
            z/crypt and passlib not found, missing dependencyN)ÚImportError)Ú_© r	   ú/usr/lib/python3.6/netbsd.pyÚblowfish_hash   s    r   c                   sn   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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 ƒ j|||ƒ tj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-yZ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__r	   r
   r   4   s    
zNetBSD.__init__c             C   s   dd||gS )NÚusermodz-Gr	   )r   Úmember_nameZ
group_namer	   r	   r
   Ú_get_add_member_to_group_cmd?   s    z#NetBSD._get_add_member_to_group_cmdc       
      K   sR  t j|ƒrtjd|ƒ dS dg}dg}dddddd	œ}d
dddœ}xf|jƒ D ]Z\}}||kr~|r~t|tƒr~|j|| |gƒ qL||krL|rL|j|| ƒ |j|| ƒ qLW d|ksºd|krÎ|dg7 }|dg7 }||g7 }||g7 }tjd|ƒ yt	j	||d� W n& t
k
�r&   t jtd|ƒ ‚ Y nX |jdd ƒ}	|	d k	�rN| j||	dd� d S )Nz!User %s already exists, skipping.FZuseraddz-dz-cz-gz-Gz-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_userB   sB    





zNetBSD.add_userFc             C   s\   |r
|}nt |ƒ}ytjdd||gƒ W n$ tk
rL   tjtd|ƒ ‚ Y nX | j|ƒ d S )Nr   z-pzFailed to set password for %s)r   r   r'   r   r(   r    Úunlock_passwd)r   Úuserr   r   Z	hashed_pwr	   r	   r
   r*   s   s    zNetBSD.set_passwdc             C   s@   yt j ddd|gƒ W n$ tk
r:   tjtd|ƒ ‚ Y nX d S )Nr   z-CÚyeszFailed to lock user %s)r   r'   r   r(   r    )r   r   r	   r	   r
   Úlock_passwd€   s
    zNetBSD.lock_passwdc             C   s@   yt j ddd|gƒ W n$ tk
r:   tjtd|ƒ ‚ Y nX d S )Nr   z-CÚnozFailed to unlock user %s)r   r'   r   r(   r    )r   r   r	   r	   r
   r/   ‡   s
    zNetBSD.unlock_passwdNc             C   s   t j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 jƒ }t jƒ }tj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   r/   r5   r<   r=   Ú__classcell__r	   r	   )r   r
   r   *   s   1

r   c               @   s   e Zd ZdS )ÚDistroN)r>   r?   r@   r	   r	   r	   r
   rC   ¢   s   rC   )Ú	functoolsZloggingr   r6   Ztypingr   Zcloudinit.distros.bsdZ	cloudinitr   r   ZcryptZMETHOD_BLOWFISHr   ÚpartialZmksaltr   r   ÚAttributeErrorZpasslib.hashr   ÚhashZ	getLoggerr>   r    ZdistrosZbsdZBSDr   rC   r	   r	   r	   r
   Ú<module>   s,    


x