fddlZddlZddlZddlmZddlZddlmZmZddl m Z ddl m Z ejeZGddej j"j$Zy)N)StringIO)subputil)FreeBSDNetworking) PER_INSTANCEc eZdZdZeZdZdZdZdZ gdZ ddgZ dd gZ dd gZ dd gZd Zd ZdZdZed(dZedddededefdZdZdZdZd)dZdZd(dZdZdZeded ed!ed"ed#ed$e f d%Z!ed&ed$dfd'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+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_init,sE) > 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.r/Tr)init_cmdlistr)rr"r#rr$r1cmdscmds rmanage_servicezDistro.manage_service:s<<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_cmdVsi{D*EEr!c 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|jdnz|jdj|j||jd|jdj|j||jdtjd| tj|||jdd} | |j!|| dyy#t$rtjtd|wxYw)Nz!User %s already exists, skipping.Fr useraddr8z-d-cz-gr9z-sz-Ez-u)homedirgecos primary_groupgroupsshellinactiveuidz--no-user-groupz--systemz --no-log-init) no_user_groupsystem no_log_initno_create_homerJz-d/nonexistentz-d{home_dir}/{name})home_dirnamez-mzAdding user %s) logstringzFailed to create user %spasswdT)hashed)ris_userrinfoitems isinstancestrintextendappendformatrMr Exceptionlogexcr set_passwd) r;rNkwargspw_useradd_cmdlog_pw_useradd_cmdpw_useradd_optspw_useradd_flagskeyval passwd_vals radd_userzDistro.add_userYs <<  HH8$ ? 46"ItT:! / *    AHCo%#*S3*2M%%s';SX&FG((S%%&6s&;<"))*:3*?@  A v %V);  ! !"2 3  % %&6 7  ! !%,,dmm$,O   ! !$ '  % %%,,dmm$,O   % %d + !4(  IIn0B C ZZ$/  ! OOD*TO : "   KK7 >  s G &G0c tjdd|ddgy#t$rtjtd|wxYw)Nr r7-pz 01-Jan-1970z"Failed to set pw expiration for %srr[rr\r)r;users r expire_passwdzDistro.expire_passwdsA  IItYdMB C  KKA4 H   &Ac|rd}nd} tjdd||dg|d|zy#t$rtjtd|wxYw) Nz-Hz-hr r70zchpasswd for %s)datarOzFailed to set password for %sri)r;rjrPrQhash_opts rr]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_filegetvaluerdebugrProcessExecutionErrorr\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!c`|jjd|jdgty)Nzupdate-sourcesr)freq)_runnerrunpackage_commandrrs rupdate_package_sourceszDistro.update_package_sourcess-    J  r!path lease_filepid_file interface config_filereturnc*|d|d|g|rd||gzS|gzS)Nz-lrhrAr:)rrrrrs rbuild_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_execrxr~ ci_sudoers_fngroup_add_cmd_prefixpkg_cmd_install_prefixpkg_cmd_remove_prefixpkg_cmd_update_prefixpkg_cmd_upgrade_prefix prefer_fqdnrMdhclient_lease_directorydhclient_lease_file_regex classmethodr rVr5r>rfrkr]rsrrr staticmethodr2rrr:r!rr r sH 'N#L%M.BM1#Y/"H-"H-#Y/KH ) 6 N N>B55#&558556F8;t 8,                  3C3D33r!r )loggingrr{iorcloudinit.distros.bsd cloudinitrrcloudinit.distros.networkingrcloudinit.settingsr getLoggerrrdistrosbsdBSDr r:r!rrsQ  :+g!T3Y   " " & &T3r!