
­­­­­­­­­­­­­­­­­­
<!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 )zRaise 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sd|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