U
    Ӈg                     @   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	 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)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                       s   e Zd ZdZdZdgZdddgZ fddZd	d
 Ze	d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-usersZgroupaddz^{username}::z'^{username}:\*\*\*\*\*\*\*\*\*\*\*\*\*:z1^{username}:\*LOCKED\*\*\*\*\*\*\*\*\*\*\*\*\*\*:c                    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   ?   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_cmdJ   s    z#NetBSD._get_add_member_to_group_cmd)returnc           
      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 )z~
        Add a user to the system using standard tools

        Returns False if user already exists, otherwise True.
        z!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passwdNT)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_userM   sH    





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    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  }dd| d| diS )z9Return env vars used in NetBSD package_command operationsZPKG_PATHz1http://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD//z/All)platformreleasemachine)r   Z
os_releaseZos_archr
   r
   r   _get_pkg_cmd_environ   s
    zNetBSD._get_pkg_cmd_environ)forcec                C   s   d S )Nr
   )r   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_prefixZ#shadow_empty_locked_passwd_patternsr   r   boolr2   r.   r8   r3   r:   r?   rA   __classcell__r
   r
   r   r   r   *   s    9

r   c                   @   s   e Zd ZdS )DistroN)rB   rC   rD   r
   r
   r
   r   rH      s   rH   )	functoolsZloggingr   r<   typingr   Zcloudinit.distros.bsdZ	cloudinitr   r   ZcryptZMETHOD_BLOWFISHr   partialZmksaltr   __annotations__r   AttributeErrorZpasslib.hashr   hashZ	getLoggerrB   r$   ZdistrosZbsdZBSDr   rH   r
   r
   r
   r   <module>   s0    


 
