
    x[h                        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	 	 d dl
Z
e
j                  Z e j                  e
j                   e
j                  e            Zeed<    ej,                  e      Z G d d	ej2                  j4                  j6                        Z G d
 de      Zy# eef$ r% 	 d dlmZ ej*                  Zn# e$ r d ZY nw xY wY rw xY w)    N)Any)subputil)saltblowfish_hash)bcryptc                     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)_s    :/usr/lib/python3/dist-packages/cloudinit/distros/netbsd.pyr   r      s    
 A     c                   t     e Zd ZdZdZdgZg dZ fdZd Zde	fdZ
dd
Zd Zd ZddZd Zd	ddZ x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                     t         |   |||       t        j                  j	                  d      r%g d| _        g d| _        g d| _        g d| _        y ddg| _        dg| _        y )	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__s       r   r   zNetBSD.__init__?   s\    sE*77>>./*DD')BD&)BD&*ID'+4d*;D'*6D&r   c                     dd||gS )Nusermod-G )r"   member_name
group_names      r   _get_add_member_to_group_cmdz#NetBSD._get_add_member_to_group_cmdJ   s    4[99r   returnc                    t        j                  |      rt        j                  d|       ydg}dg}dddddd	}d
ddd}|j	                         D ]b  \  }}||v r)|r't        |t              r|j                  ||   |g       3||v s8|s;|j                  ||          |j                  ||          d d|vsd|vr|dgz  }|dgz  }||gz  }||gz  }t        j                  d|       	 t        j                  ||       |j                  dd      }	|	| j                  ||	d       y# t        $ r t        j                  t        d|        w xY w)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_homer7   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_vals
             r   add_userzNetBSD.add_userM   s    <<HH8$? k$+ !
 / *
  	;HCl"sz#s/C""L$5s#;<%#""=#56&&}S'9:	; 6)XV-CD6!Kv%OvD6! 	!4(	IIk_= ZZ$/
!OOD*TO:   	KK7>	s   -D- -&EFc                     |r|}nt        |      }	 t        j                  dd||g       | j                  |       y # t        $ r t        j                  t
        d|        w xY w)Nr(   z-pzFailed to set password for %s)r   r   rE   r   rF   r>   unlock_passwd)r"   userr;   r<   	hashed_pws        r   rH   zNetBSD.set_passwd   sc    I%f-I	IIy$	489 	4   	KK<dC	s	   = &A#c                     	 t        j                   ddd|g       y # t        $ r t        j                  t        d|        w xY w)Nr(   -CyeszFailed to lock user %sr   rE   r   rF   r>   r"   r#   s     r   lock_passwdzNetBSD.lock_passwd   s?    	IIy$t45 	KK5t<		    &Ac                     	 t        j                   ddd|g       y # t        $ r t        j                  t        d|        w xY w)Nr(   rW   nozFailed to unlock user %srY   rZ   s     r   rS   zNetBSD.unlock_passwd   s?    	IIy$d34 	KK7>	r\   c                 .    t         j                  d       y )NzCannot set the locale.)r>   debug)r"   localeout_fns      r   apply_localezNetBSD.apply_locale   s    		*+r   c                 h    t        j                         }t        j                         }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_archs      r   _get_pkg_cmd_environzNetBSD._get_pkg_cmd_environ   sB    %%'
""$9Aj\/
 	
r   )forcec                     y Nr*   )r"   rm   s     r   update_package_sourceszNetBSD.update_package_sources   s    r   )Fro   )__name__
__module____qualname____doc__ci_sudoers_fngroup_add_cmd_prefix#shadow_empty_locked_passwd_patternsr   r-   boolrQ   rH   r[   rS   rc   rl   rp   __classcell__)r&   s   @r   r   r   *   s_     AM&<+'	8:7$ 7r!,	
 /4  r   r   c                       e Zd Zy)DistroN)rq   rr   rs   r*   r   r   r{   r{      s    r   r{   )	functoolsloggingr   rg   typingr   cloudinit.distros.bsd	cloudinitr   r   cryptMETHOD_BLOWFISHr   partialmksaltr   __annotations__r
   AttributeErrorpasslib.hashr   hash	getLoggerrq   r>   distrosbsdBSDr   r{   r*   r   r   <module>r      s   
   	       D***U\\$M3 * g!FY""&& FR	V 	{ 	^$ ' 			s6   AB/ /C7C
	C
CCCCC