x[h"ddlZddlZddlZddlmZddlZddlmZmZddl m Z ddl m Z m Z ejeZGddej"j$j&Zy)N)StringIO)subputil)FreeBSDNetworking) PER_ALWAYS PER_INSTANCEc $eZdZdZeZdZdZdZdZ gdZ ddgZ dd gZ dd gZ dd gZd Zd ZdZdZgdZed,dZedddededefdZdZdefdZdZd-dZdZdZd,d Zd!Z dd"d#Z!e"d$ed%ed&ed'ed(ede#f d)Z$e"d*eddfd+Z%y).DistrozY 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)pwgroupaddpkginstallremoveupdateupgradeTz /usr/homez/var/dbzdhclient.leases.\w+)z ^{username}::z^{username}:\*:z^{username}:\*LOCKED\*:Nctjjd}|tj dyt j dd|gd|S)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 Environmentkillz-SIGALRMTcapturercs)osenvirongetLOGwarningr)clsrrc_pids ;/usr/lib/python3/dist-packages/cloudinit/distros/freebsd.py reload_initzDistro.reload_init7sE) > KKJ K yy&*f5tMM)ractionservice extra_argsc |j}|dg|dg|dg|dg|dg|dg|dg|dg|dg|dg|d g|d gd }|||zt|z}tj|d | S)a 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 stopstartenableenableddisableonestartonestoprestartstatus onestatus) r'r(r)r*r+r,r-r.reloadz try-reloadr/r0Tr)init_cmdlistr)rr#r$rr%r2cmdscmds r manage_servicezDistro.manage_serviceEs<<f%w')++ *-++ *"I.)!;/  f%Z(88yyd44r"cddd|d|gS)Nr usermod-n-G)self member_name group_names r _get_add_member_to_group_cmdz#Distro._get_add_member_to_group_cmdasi{D*EEr"returnc tj|rtjd|yddd|g}ddd|g}dddd d d d d }dddd}|j D]q\}}||vr8|r6t |t tfr |j||t |gB||vsG|sJ|j|||j||sd|vsd|vr#|jd|jdnk|jd|jd|} |jd| z|jd|jd| z|jdtjd| tj|||jdd} | |j|| dy#t$rtjtd|wxYw)z~ Add a user to the system using standard tools Returns False if user already exists, otherwise True. z!User %s already exists, skipping.Fr useraddr9z-d-cz-gr:z-sz-Ez-u)homedirgecos primary_groupgroupsshellinactiveuidz--no-user-groupz--systemz --no-log-init) no_user_groupsystem no_log_initno_create_homerLz-d/nonexistentrD/z-mzAdding user %s) logstringzFailed to create user %spasswdNT)hashed)ris_userrinfoitems isinstancestrintextendappendrhome_dirr Exceptionlogexc set_passwd) r<namekwargspw_useradd_cmdlog_pw_useradd_cmdpw_useradd_optspw_useradd_flagskeyvalrD passwd_vals r add_userzDistro.add_userds <<  HH8$ ? 46"ItT:! / *    AHCo%#*S3*2M%%s';SX&FG((S%%&6s&;<"))*:3*?@  A v %V);  ! !"2 3  % %&6 7jjt}}oQtf,EFG  ! !$. 1  ! !$ '  % %dWn 5  % %d + !4(  IIn0B C ZZ$/  ! OOD*TO :  KK7 >  s :F::&G c tjdd|ddgy#t$rtjtd|wxYw)Nr r8-pz 01-Jan-1970z"Failed to set pw expiration for %srr\rr]r)r<users r expire_passwdzDistro.expire_passwdsA  IItYdMB C  KKA4 H   &AFc|rd}nd} tjdd||dg|d|zy#t$rtjtd|wxYw) Nz-Hz-hr r80zchpasswd for %s)datarPzFailed to set password for %srk)r<rlrQrRhash_opts r r^zDistro.set_passwds^ HH  IIy$#6+d2    KKtj|j|jtj|j|j tjd|tjd|jgy#tj$r~tj td| tj|j|jYy#t"$r)tj td|jYYywxYwwxYw)Nz ^default:zdefault:lang=%s: zRunning cap_mkdb for %scap_mkdbzFailed to apply locale %szFailed to restore %s backup)rrload_text_file login_conf_fn splitlineswriteresubcopylogin_conf_fn_bak write_filegetvaluerrxrProcessExecutionErrorr]IOError)r<localeout_fnnewconflines r apply_localezDistro.apply_locales6*''(:(:;FFH D MM|%86%A4H  MM$    $$$d&<&<= **G,<,<,>?  II/ 8 IIz4#5#56 7))  KK8& A  $00$2D2DE  68J8J   s*7D.F7*E##.FFFFc ddiS)zJReturn environment vars used in FreeBSD package_command operationsASSUME_ALWAYS_YESYESr;)r<s r _get_pkg_cmd_environzDistro._get_pkg_cmd_environs$U++r")forcec||jjd|jdg|r tyty)Nzupdate-sourcesr)freq)_runnerrunpackage_commandrr)r<rs r update_package_sourceszDistro.update_package_sourcess>    J$  +7  r"path lease_filepid_file interface config_filec*|d|d|g|rd||gzS|gzS)Nz-lrjrCr;)rrrrrs r build_dhclient_cmdzDistro.build_dhclient_cmds7dJh7.9T; *  @I{  r"devicec4tjdd|gy)N camcontroleject)r)rs r eject_mediazDistro.eject_medias <&12r")N)F)&__name__ __module__ __qualname____doc__rnetworking_cls usr_lib_execr~r ci_sudoers_fngroup_add_cmd_prefixpkg_cmd_install_prefixpkg_cmd_remove_prefixpkg_cmd_update_prefixpkg_cmd_upgrade_prefix prefer_fqdnr[dhclient_lease_directorydhclient_lease_file_regex#shadow_empty_locked_passwd_patterns classmethodr!rWr6r?boolrhrmr^rvryrrr staticmethodr3rrr;r"r r r sc 'N#L%M.BM1#Y/"H-"H-#Y/KH ) 6+'  N N>B55#&558556F<$<|  8, /4                 3C3D33r"r )loggingrriorcloudinit.distros.bsd cloudinitrrcloudinit.distros.networkingrcloudinit.settingsrr getLoggerrrdistrosbsdBSDr r;r"r rsQ  :7g!j3Y   " " & &j3r"