o
    f                     @   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	 zd dl
Z
e
jZe je
j
e
edZeed< W n$ eefy_   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)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                       s   e Zd ZdZdZdgZg dZ fddZdd Zd	e	fd
dZ
dddZdd Zdd ZdddZdd Zdd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groupadd)z^{username}::z'^{username}:\*\*\*\*\*\*\*\*\*\*\*\*\*:z1^{username}:\*LOCKED\*\*\*\*\*\*\*\*\*\*\*\*\*\*:c                    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   ?   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_cmdJ   s   z#NetBSD._get_add_member_to_group_cmdreturnc           
      K   sD  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 )z~
        Add a user to the system using standard tools

        Returns False if user already exists, otherwise True.
        z!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passwdNT)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_userM   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   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  }dd| d| diS )z9Return env vars used in NetBSD package_command operationsPKG_PATHz1http://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD//z/All)platformreleasemachine)r   
os_releaseos_archr
   r
   r   _get_pkg_cmd_environ   s   zNetBSD._get_pkg_cmd_environ)forcec                C   s   d S Nr
   )r   rc   r
   r
   r   update_package_sources   s   zNetBSD.update_package_sources)Frd   )__name__
__module____qualname____doc__ci_sudoers_fngroup_add_cmd_prefix#shadow_empty_locked_passwd_patternsr   r(   boolrK   rB   rT   rL   rZ   rb   re   __classcell__r
   r
   r"   r   r   *   s    
9
r   c                   @   s   e Zd ZdS )DistroN)rf   rg   rh   r
   r
   r
   r   ro      s    ro   )	functoolsloggingr   r]   typingr   cloudinit.distros.bsd	cloudinitr   r   cryptMETHOD_BLOWFISHr   partialmksaltr   __annotations__r   AttributeErrorpasslib.hashr   hash	getLoggerrf   r8   distrosbsdBSDr   ro   r
   r
   r
   r   <module>   s6   


 
