o
    w7eO                     @   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
 zd dlZejZe jejeedZeed< W n$ eefya   zd dlmZ ejZW n ey^   dd ZY nw Y nw 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)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 dependency)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-usersgroupaddc                    s^   t  ||| tjdr$g d| _g d| _g d| _g d| _d S ddg| _dg| _d S )	Nz/usr/pkg/bin/pkgin)pkgin-yinstall)r   r   remove)r   r   update)r   r   zfull-upgradepkg_addz-U
pkg_delete)	super__init__ospathexistspkg_cmd_install_prefixpkg_cmd_remove_prefixpkg_cmd_update_prefixpkg_cmd_upgrade_prefix)selfnamecfgpaths	__class__r   r   r   4   s   



zNetBSD.__init__c                 C   s   dd||gS )Nusermod-Gr   )r   member_name
group_namer   r   r   _get_add_member_to_group_cmd?   s   z#NetBSD._get_add_member_to_group_cmdc           
      K   sH  t |rtd| dS dg}dg}dddddd	}d
ddd}| D ]-\}}||v r>|r>t|tr>||| |g q%||v rR|rR|||  |||  q%d|vs[d|vre|dg7 }|dg7 }||g7 }||g7 }td| z	t	j	||d W n t
y   t td|  w |dd }	|	d ur| j||	dd d S d S )Nz!User %s already exists, skipping.Fuseraddz-dz-cz-gr&   z-s)homedirgecosprimary_groupgroupsshellz--no-user-groupz--systemz--no-log-init)no_user_groupsystemno_log_initno_create_homer1   z-mzAdding user %s)	logstringzFailed to create user %spasswdT)hashed)r   is_userLOGinfoitems
isinstancestrextendappendr   	Exceptionlogexcget
set_passwd)
r   r    kwargsadduser_cmdlog_adduser_cmdadduser_optsadduser_flagskeyval
passwd_valr   r   r   add_userB   sL   




zNetBSD.add_userFc                 C   sV   |r|}nt |}ztdd||g W n ty#   ttd|  w | | d S )Nr%   z-pzFailed to set password for %s)r   r   r?   r   r@   r8   unlock_passwd)r   userr5   r6   	hashed_pwr   r   r   rB   s   s   zNetBSD.set_passwdc                 C   8   zt  ddd|g W d S  ty   ttd|  w )Nr%   -CyeszFailed to lock user %sr   r?   r   r@   r8   r   r    r   r   r   lock_passwd      zNetBSD.lock_passwdc                 C   rO   )Nr%   rP   nozFailed to unlock user %srR   rS   r   r   r   rL      rU   zNetBSD.unlock_passwdNc                 C   s   t d d S )NzCannot set the locale.)r8   debug)r   locale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/AllPKG_PATH)platformreleasemachiner   environcopy)r   
os_release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)Fre   )__name__
__module____qualname____doc__ci_sudoers_fngroup_add_cmd_prefixr   r)   rK   rB   rT   rL   rZ   rd   rf   __classcell__r   r   r#   r   r   *   s    
1
r   c                   @   s   e Zd ZdS )DistroN)rg   rh   ri   r   r   r   r   rn      s    rn   )	functoolsr   r\   typingr   cloudinit.distros.bsd	cloudinitr   loggingr   r   cryptMETHOD_BLOWFISHr   partialmksaltr   __annotations__r	   AttributeErrorpasslib.hashr   hash	getLoggerrg   r8   distrosbsdBSDr   rn   r   r   r   r   <module>   s4   


x