ó
    x[h"  ã                   óÒ   • 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	J
r
  S SKJrJr  \ R                  " \5      r " S S\R"                  R$                  R&                  5      rg)é    N)ÚStringIO)ÚsubpÚutil)ÚFreeBSDNetworking)Ú
PER_ALWAYSÚPER_INSTANCEc                   ó>  • \ rS rSrSr\rSrSrSr	Sr
/ SQrSS	/rSS
/rSS/rSS/rSrSrSrSr/ SQr\S.S j5       r\SS.S\S\S\4S jj5       rS rS\4S jrS rS/S jrS rS  rS.S! jr S" r!SS#.S$ jr"\#S%\S&\S'\S(\S)\S\$4S* j5       r%\#S+\SS4S, j5       r&S-r'g)0ÚDistroé   zM
Distro subclass for FreeBSD.

(N.B. DragonFlyBSD inherits from this class.)
z/usr/local/libz/etc/login.confz/etc/login.conf.origz,/usr/local/etc/sudoers.d/90-cloud-init-users)ÚpwÚgroupÚaddÚpkgÚinstallÚremoveÚupdateÚupgradeTz	/usr/homez/var/dbzdhclient.leases.\w+)z^{username}::z^{username}:\*:z^{username}:\*LOCKED\*:Nc                 ó¤   • [         R                  R                  S5      nUc  [        R	                  S5        g[
        R
                  " SSU/SUS9$ )zŒ
Tell rc to reload its configuration
Note that this only works while we're still in the process of booting.
May raise ProcessExecutionError
ÚRC_PIDNz0Unable to reload rc(8): no RC_PID in EnvironmentÚkillz-SIGALRMT©ÚcaptureÚrcs)ÚosÚenvironÚgetÚLOGÚwarningr   )Úclsr   Úrc_pids      Ú;/usr/lib/python3/dist-packages/cloudinit/distros/freebsd.pyÚreload_initÚDistro.reload_init7   sE   € ô —‘—‘ Ó)ˆØ‰>Ü�K‰KÐJÔKØä�yŠy˜& *¨fÐ5¸tÈÑMÐMó    )r   ÚactionÚserviceÚ
extra_argsc                óº   • U R                   nUS/US/US/US/US/US/US/US/US/US/US	/US
/S.nXVU   -   [        U5      -   n[        R                  " USUS9$ )zÝ
Perform the requested action on a service. This handles FreeBSD's
'service' case. The FreeBSD 'service' is closer in features to
'systemctl' than SysV init's 'service', so we override it.
May raise ProcessExecutionError
ÚstopÚstartÚenableÚenabledÚdisableÚonestartÚonestopÚrestartÚstatusÚ	onestatus)r)   r*   r+   r,   r-   r.   r/   r0   Úreloadz
try-reloadr1   r2   Tr   )Úinit_cmdÚlistr   )r   r%   r&   r   r'   r4   ÚcmdsÚcmds           r!   Úmanage_serviceÚDistro.manage_serviceE   sŸ   € ð —<‘<ˆà˜fÐ%Ø˜wÐ'Ø Ð)Ø Ð+Ø Ð+Ø  *Ð-Ø Ð+Ø Ð+Ø 	Ð*Ø" IÐ.Ø Ð)Ø! ;Ð/ñ
ˆð ˜f™Ñ%¬¨ZÓ(8Ñ8ˆÜ�yŠy˜ d°Ñ4Ð4r$   c                 ó   • SSSUSU/$ )Nr   Úusermodú-nú-G© )ÚselfÚmember_nameÚ
group_names      r!   Ú_get_add_member_to_group_cmdÚ#Distro._get_add_member_to_group_cmda   s   € Ø�i  {°D¸*ÐEÐEr$   Úreturnc                 óö  • [         R                  " U5      (       a  [        R                  SU5        gSSSU/nSSSU/nSSSS	S
SSS.nSSSS.nUR	                  5        H‚  u  pxXu;   aB  U(       a;  [        U[        [        45      (       a   UR                  XW   [        U5      /5        ML  Xv;   d  MS  U(       d  M\  UR                  Xg   5        UR                  Xg   5        M„     SU;   d  SU;   a#  UR                  S5        UR                  S5        OkUR                  SU R                   SU 35      n	UR                  SU	-   5        UR                  S5        UR                  SU	-   5        UR                  S5        [        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.Fr   Úuseraddr<   z-dú-cz-gr=   z-sz-Ez-u)ÚhomedirÚgecosÚprimary_groupÚgroupsÚshellÚinactiveÚuidz--no-user-groupz--systemz--no-log-init)Úno_user_groupÚsystemÚno_log_initÚno_create_homerP   z-d/nonexistentrH   Ú/z-mzAdding user %s)Ú	logstringzFailed to create user %sÚpasswdNT)Úhashed)r   Úis_userr   ÚinfoÚitemsÚ
isinstanceÚstrÚintÚextendÚappendr   Úhome_dirr   Ú	ExceptionÚlogexcÚ
set_passwd)r?   ÚnameÚkwargsÚpw_useradd_cmdÚlog_pw_useradd_cmdÚpw_useradd_optsÚpw_useradd_flagsÚkeyÚvalrH   Ú
passwd_vals              r!   Úadd_userÚDistro.add_userd   sé  € ô �<Š<˜×ÑÜ�H‰HÐ8¸$Ô?Øà 	¨4°Ð6ˆØ" I¨t°TÐ:Ðð ØØ!ØØØØñ
ˆð /Ø Ø*ñ
Ðð Ÿ™ž‰HˆCØÓ%®#´*¸SÄ3ÌÀ*×2MÑ2MØ×%Ñ% Ñ';¼SÀ»XÐ&FÖGàÕ(¯S¨SØ×%Ñ%Ð&6Ñ&;Ô<Ø"×)Ñ)Ð*:Ñ*?Ö@ñ 'ð ˜vÓ%¨°VÓ);Ø×!Ñ!Ð"2Ô3Ø×%Ñ%Ð&6Õ7à—j‘j ¨t¯}©}¨o¸Q¸t¸fÐ,EÓFˆGØ×!Ñ! $¨¡.Ô1Ø×!Ñ! $Ô'Ø×%Ñ% d¨W¡nÔ5Ø×%Ñ% dÔ+ô 	�‰Ð! 4Ô(ð	Ü�IŠI�nÒCð —Z‘Z ¨$Ó/ˆ
ØÑ!Ø�O‰O˜D°TˆOÑ:ð øô ó 	Ü�KŠKœÐ7¸Ô>Øð	ús   ÆG Ç(G8c                 ó’   •  [         R                   " SSUSS/5        g ! [         a    [        R                  " [        SU5        e f = f)Nr   r;   ú-pz01-Jan-1970z"Failed to set pw expiration for %s©r   r`   r   ra   r   )r?   Úusers     r!   Úexpire_passwdÚDistro.expire_passwd¢   sA   € ð	Ü�IŠI�t˜Y¨¨d°MÐBÕCøÜó 	Ü�KŠKœÐAÀ4ÔHØð	úó	   ‚ ž(AFc                 ó®   • U(       a  SnOSn [         R                   " SSXS/USU-  S9  g ! [         a    [        R                  " [        SU5        e f = f)	Nz-Hz-hr   r;   Ú0zchpasswd for %s)ÚdatarT   zFailed to set password for %srp   )r?   rq   rU   rV   Úhash_opts        r!   rb   ÚDistro.set_passwd©   s\   € ÞØ‰HàˆHð	Ü�IŠIØ�y $°#Ð6ØØ+¨dÑ2óøô
 ó 	Ü�KŠKœÐ<¸dÔCØð	ús	   Ž, ¬(Ac                 ó’   •  [         R                   " SSUSS/5        g ! [         a    [        R                  " [        SU5        e f = f)Nr   r;   z-wÚnoz)Failed to lock password login for user %srp   ©r?   rc   s     r!   Úlock_passwdÚDistro.lock_passwd¹   sA   € ð	Ü�IŠI�t˜Y¨¨d°DÐ9Õ:øÜó 	Ü�KŠKœÐHÈ$ÔOØð	úrt   c                 ó0   • [         R                  SU5        g )NzRDragonfly BSD/FreeBSD password lock is not reversible, ignoring unlock for user %s)r   Údebugr|   s     r!   Úunlock_passwdÚDistro.unlock_passwdÀ   s   € Ü�	‰	ð*àõ	
r$   c                 óP  • [        5       n[        R                  " U R                  5      R	                  5        H>  nUR                  [        R                  " SSU-  U5      5        UR                  S5        M@     [        R                  " U R                  U R                  5        [        R                  " U R                  UR                  5       5         [        R                  SU5        [        R                  " SU R                  /5        g ! [        R                   a‚    [        R                   " [        SU5         [        R                  " U R                  U R                  5         g ! ["         a*    [        R                   " [        SU R                  5          g f = ff = f)Nz	^default:zdefault:lang=%s:Ú
zRunning cap_mkdb for %sÚcap_mkdbzFailed to apply locale %szFailed to restore %s backup)r   r   Úload_text_fileÚlogin_conf_fnÚ
splitlinesÚwriteÚreÚsubÚcopyÚlogin_conf_fn_bakÚ
write_fileÚgetvaluer   r€   r   ÚProcessExecutionErrorra   ÚIOError)r?   ÚlocaleÚout_fnÚnewconfÚlines        r!   Úapply_localeÚDistro.apply_localeÇ   s2  € ä“*ˆÜ×'Ò'¨×(:Ñ(:Ó;×FÑFÖHˆDØ�M‰MÜ—’�|Ð%8¸6Ñ%AÀ4ÓHôð �M‰M˜$Öñ	 Iô 	�	Š	�$×$Ñ$ d×&<Ñ&<Ô=ô 	�Š˜×*Ñ*¨G×,<Ñ,<Ó,>Ô?ð	Ü�I‰IÐ/°Ô8Ü�IŠI�z 4×#5Ñ#5Ð6Õ7øÜ×)Ñ)ó 	ä�KŠKœÐ8¸&ÔAðÜ—	’	˜$×0Ñ0°$×2DÑ2DÖEøÜó Ü—’ÜÐ6¸×8JÑ8J÷ðúð	ús*   Ã8D Ä0F%Å +E-Å-0F!ÆF%Æ F!Æ!F%c                 ó
   • SS0$ )zBReturn environment vars used in FreeBSD package_command
operationsÚASSUME_ALWAYS_YESÚYESr>   )r?   s    r!   Ú_get_pkg_cmd_environÚDistro._get_pkg_cmd_environã   s   € ð $ UÐ+Ð+r$   )Úforcec                ót   • U R                   R                  SU R                  S/U(       a  [        O[        S9  g )Nzupdate-sourcesr   )Úfreq)Ú_runnerÚrunÚpackage_commandr   r   )r?   r�   s     r!   Úupdate_package_sourcesÚDistro.update_package_sourcesè   s1   € Ø�‰×ÑØØ× Ñ ØˆJÞ$•¬,ð	 	ò 	
r$   ÚpathÚ
lease_fileÚpid_fileÚ	interfaceÚconfig_filec                 ó2   • U SUSU/U(       a  SXC/-   $ U/-   $ )Nz-lro   rG   r>   )r¥   r¦   r§   r¨   r©   s        r!   Úbuild_dhclient_cmdÚDistro.build_dhclient_cmdð   s5   € ð �d˜J¨¨hÐ7Þ.9ˆT�;Ð*ñ
ð 	
Ø@I¸{ñ
ð 	
r$   Údevicec                 ó6   • [         R                   " SSU /5        g )NÚ
camcontrolÚeject)r   )r­   s    r!   Úeject_mediaÚDistro.eject_mediaü   s   € ä�	Š	�< ¨&Ð1Õ2r$   r>   )N)F)(Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Únetworking_clsÚusr_lib_execr‡   r�   Úci_sudoers_fnÚgroup_add_cmd_prefixÚpkg_cmd_install_prefixÚpkg_cmd_remove_prefixÚpkg_cmd_update_prefixÚpkg_cmd_upgrade_prefixÚprefer_fqdnr_   Údhclient_lease_directoryÚdhclient_lease_file_regexÚ#shadow_empty_locked_passwd_patternsÚclassmethodr"   r[   r8   rB   Úboolrl   rr   rb   r}   r�   r–   r›   r£   Ústaticmethodr5   r«   r±   Ú__static_attributes__r>   r$   r!   r
   r
      sc  † ñð '€NØ#€LØ%€MØ.ÐØB€MÚ1ÐØ# YÐ/ÐØ" HÐ-ÐØ" HÐ-ÐØ# YÐ/ÐØ€KØ€Hð  )ÐØ 6Ðò+Ð'ð óNó ðNð à>Bò5Øð5Ø#&ð5Ø58ô5ó ð5ò6Fð<¨$ô <ò|ôò ò
ôò8,ð
 /4õ 
ð ð	
Øð	
àð	
ð ð	
ð ð		
ð
 ð	
ð 
ó	
ó ð	
ð ð3˜Cð 3 Dó 3ó ó3r$   r
   )Úloggingr   rŠ   Úior   Úcloudinit.distros.bsdÚ	cloudinitr   r   Úcloudinit.distros.networkingr   Úcloudinit.settingsr   r   Ú	getLoggerr³   r   ÚdistrosÚbsdÚBSDr
   r>   r$   r!   Ú<module>rÒ      sO   ðó Û 	Û 	Ý ã ß  Ý :ß 7à×Ò˜Ó!€ôj3ˆY×Ñ×"Ñ"×&Ñ&õ j3r$   