U
    LdO                     @   s   U 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 d dlm	Z	m
Z
 z0d dlZejZe jejeedZeed< W nL eefk
r   zd dlmZ ejZW n ek
r   dd ZY nX Y nX eeZG d	d
 d
ejjjZG dd deZdS )    N)Any)log)subputil)saltblowfish_hash)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/dist-packages/cloudinit/distros/netbsd.pyr      s    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  ||| 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__r   r   r   4   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sd|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_userB   sF    





zNetBSD.add_userFc                 C   s\   |r
|}nt |}ztdd||g W n$ tk
rL   ttd|  Y nX | | 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@   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 %sr   r+   r   r,   r$   r   r   r   r   r   lock_passwd   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   r5   ZnozFailed to unlock user %sr6   r7   r   r   r   r3      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   r2   r.   r8   r3   r:   rA   rB   __classcell__r   r   r   r   r   *   s   1

r   c                   @   s   e Zd ZdS )DistroN)rC   rD   rE   r   r   r   r   rH      s   rH   )	functoolsr   r;   typingr   Zcloudinit.distros.bsdZ	cloudinitr   Zloggingr   r   ZcryptZMETHOD_BLOWFISHr   partialZmksaltr   __annotations__r	   AttributeErrorZpasslib.hashr   hashZ	getLoggerrC   r$   ZdistrosZbsdZBSDr   rH   r   r   r   r   <module>   s.    


x