
    x[h                        % S SK r S SKrS SKrS SKrS SKJr  S SKrS SKJrJ	r	   S SK
r
\
R                  r\ R                  " \
R                  \
R                  " \5      S9r\\S'   \R,                  " \5      r " S S	\R2                  R4                  R6                  5      r " S
 S\5      rg! \\4 a&     S SKJr  \R*                  r Nd! \ a    S r  Npf = ff = f)    N)Any)subputil)saltblowfish_hash)bcryptc                     [        S5      e)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                      ^  \ rS rSrSrSrS/r/ SQrU 4S jrS r	S\
4S	 jrSS jrS rS rSS jrS rS
S.S jrSrU =r$ )NetBSD*   zG
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U ]  XU5        [        R                  R	                  S5      (       a%  / SQU l        / SQU l        / SQU l        / SQU l        g SS/U l        S/U l        g )	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   NetBSD.__init__?   s]    E*77>>.//*DD')BD&)BD&*ID'+4d*;D'*6D&r   c                     SSX!/$ )Nusermod-G )r#   member_name
group_names      r   _get_add_member_to_group_cmd#NetBSD._get_add_member_to_group_cmdJ   s    499r   returnc                    [         R                  " U5      (       a  [        R                  SU5        gS/nS/nSSSSSS	.nS
SSS.nUR	                  5        Hs  u  pxXu;   a3  U(       a,  [        U[        5      (       a  UR                  XW   U/5        M=  Xv;   d  MD  U(       d  MM  UR                  Xg   5        UR                  Xg   5        Mu     SU;  d  SU;  a  US/-  nUS/-  nX1/-  nXA/-  n[        R                  SU5         [        R                  " X4S9  UR                  SS5      n	U	b  U R                  XSS9  g! [         a    [         R                  " [        SU5        e f = f)zf
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_homer:   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_userNetBSD.add_userM   sx    <<HH8$? k$+ !
 / *
 HC"sz#s/C/C""L$5s#;<%##""=#56&&}'9: ' 6)XV-CD6!Kv%Ov6! 	!4(	IIk= ZZ$/
!OODTO:   	KK7>	s   E (E)Fc                     U(       a  UnO[        U5      n [        R                  " SSXA/5        U R                  U5        g ! [         a    [        R                  " [
        SU5        e f = f)Nr*   z-pzFailed to set password for %s)r   r   rH   r   rI   rA   unlock_passwd)r#   userr>   r?   	hashed_pws        r   rK   NetBSD.set_passwd   sa    I%f-I	IIy$	89 	4   	KK<dC	s   A (A*c                      [         R                   " SSSU/5        g ! [         a    [        R                  " [        SU5        e f = f)Nr*   -CyeszFailed to lock user %sr   rH   r   rI   rA   r#   r$   s     r   lock_passwdNetBSD.lock_passwd   s?    	IIy$t45 	KK5t<		    (Ac                      [         R                   " SSSU/5        g ! [         a    [        R                  " [        SU5        e f = f)Nr*   r\   nozFailed to unlock user %sr^   r_   s     r   rW   NetBSD.unlock_passwd   s?    	IIy$d34 	KK7>	rb   c                 .    [         R                  S5        g )NzCannot set the locale.)rA   debug)r#   localeout_fns      r   apply_localeNetBSD.apply_locale   s    		*+r   c                 l    [         R                  " 5       n[         R                  " 5       nSSU SU S30$ )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_environNetBSD._get_pkg_cmd_environ   sB    %%'
""$9Aj\/
 	
r   )forcec                    g Nr,   )r#   rv   s     r   update_package_sourcesNetBSD.update_package_sources   s    r   )r   r    r!   r"   )Frx   )__name__
__module____qualname____firstlineno____doc__ci_sudoers_fngroup_add_cmd_prefix#shadow_empty_locked_passwd_patternsr   r/   boolrT   rK   r`   rW   rj   rt   ry   __static_attributes____classcell__)r'   s   @r   r   r   *   s_     AM&<+'	8:7$ 7r!,	
 /4  r   r   c                       \ rS rSrSrg)Distro   r,   N)r{   r|   r}   r~   r   r,   r   r   r   r      s    r   r   )	functoolsloggingr   ro   typingr   cloudinit.distros.bsd	cloudinitr   r   cryptMETHOD_BLOWFISHr   partialmksaltr   __annotations__r
   AttributeErrorpasslib.hashr   hash	getLoggerr{   rA   distrosbsdBSDr   r   r,   r   r   <module>r      s   
   	       D"**\\$M3 * !FY""&& FR	V 	{ 	^$ ' 			s*   A B, ,C5C			CCCC