
    }f,                        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                   f     e Zd ZdZdZdgZ fdZd Z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groupaddc                     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__4   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_cmd?   s    4[99r   c                    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 y # t        $ r t        j                  t        d|        w xY w)Nz!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_homer6   z-mzAdding user %s)	logstringzFailed to create user %spasswdT)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_userB   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   rD   r   rE   r=   unlock_passwd)r"   userr:   r;   	hashed_pws        r   rG   zNetBSD.set_passwds   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   rD   r   rE   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(   rV   nozFailed to unlock user %srX   rY   s     r   rR   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"   rl   s     r   update_package_sourceszNetBSD.update_package_sources   s    r   )Frn   )__name__
__module____qualname____doc__ci_sudoers_fngroup_add_cmd_prefixr   r-   rP   rG   rZ   rR   rb   rk   ro   __classcell__)r&   s   @r   r   r   *   sP     AM&<	8:/;b!,	
 /4  r   r   c                       e Zd Zy)DistroN)rp   rq   rr   r*   r   r   rx   rx      s    r   rx   )	functoolsloggingr   rf   typingr   cloudinit.distros.bsd	cloudinitr   r   cryptMETHOD_BLOWFISHr   partialmksaltr   __annotations__r
   AttributeErrorpasslib.hashr   hash	getLoggerrp   r=   distrosbsdBSDr   rx   r*   r   r   <module>r      s   
   	       D***U\\$M3 * g!sY""&& sl	V 	U 	^$ ' 			s6   AB/ /C7C
	C
CCCCC