o
    x[h  ã                   @   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ƒ‚)z¼Raise 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   
þ
þ€û
 
