܍~cddlZddlZddlmZddlZddlmZddlmZm Z ddl m Z ddl m Z ejeZGddejjjZdS) N)StringIO)log)subputil)FreeBSDNetworking) PER_INSTANCEceZdZdZeZdZdZdZdZ gdZ ddgZ dd gZ dd gZ dd gZd Zd ZdedefdZdZdZdZddZdZddZdZdZdS)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/homeactionservicec |j}|dg|dg|dg|dg|dg|dg|dg|dgd}t|t||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 stopstartenabledisablerestartstatus)rrrrrreloadz try-reloadrT)capture)init_cmdlistr)selfrrrcmdscmds ;/usr/lib/python3/dist-packages/cloudinit/distros/freebsd.pymanage_servicezDistro.manage_service(s=f%w')++ *"I.)   8nntDL111yd++++cddd|d|gS)Nr usermod-n-G)r member_name group_names r#_get_add_member_to_group_cmdz#Distro._get_add_member_to_group_cmd=si{D*EEr%c Ptj|rtd|dSddd|g}ddd|g}dddd d d d }d ddd}|D]z\}}||vr5|r3t |t r||||g>||vr8|r6||||||{d|vsd|vr+|d|dn|d |j ||d|d |j ||dtd| tj ||n*#t$rtj td|wxYw|dd} | ||| ddSdS)Nz!User %s already exists, skipping.Fr useraddr(z-dz-cz-gr)z-sz-E)homedirgecos primary_groupgroupsshellinactivez--no-user-groupz--systemz --no-log-init) no_user_groupsystem no_log_initno_create_homer7z-d/nonexistentz-d{home_dir}/{name})home_dirnamez-mzAdding user %s) logstringzFailed to create user %spasswdT)hashed)ris_userLOGinfoitems isinstancestrextendappendformatr:r Exceptionlogexcget set_passwd) r r;kwargspw_useradd_cmdlog_pw_useradd_cmdpw_useradd_optspw_useradd_flagskeyval passwd_vals r#add_userzDistro.add_user@s <    HH8$ ? ? ?5 46"ItT:!   / *     A AHCo%%#%*S#2F2F%%%s';S&ABBBB(((S(%%&6s&;<<<"))*:3*?@@@ v % %V););  ! !"2 3 3 3  % %&6 7 7 7 7  ! !%,,dm$,OO     ! !$ ' ' '  % %%,,dm$,OO     % %d + + + !4(((  In0B C C C C C    K7 > > >   ZZ$//  ! OOD*TO : : : : : " !s 3G 'G1c tjdd|ddgdS#t$rtjtd|wxYw)Nr r'z-pz 01-Jan-1970z"Failed to set pw expiration for %srrHrrIr@)r users r# expire_passwdzDistro.expire_passwdys[  ItYdMB C C C C C    KA4 H H H   'AFc|rd}nd} tjdd||dg|d|zdS#t$rtjtd|wxYw) Nz-H-hr r'0zchpasswd for %s)datar<zFailed to set password for %srV)r rWr=r>hash_opts r#rKzDistro.set_passwds  HHH  Iy$#6+d2           K,>???  II/ 8 8 8 Iz4#56 7 7 7 7 7)    K8& A A A  $0$2DEEEEEE    68J   s* 6D*F-E*E>9F=E>>FcLtj}d|d<|S)zJReturn environment vars used in FreeBSD package_command operationsYESASSUME_ALWAYS_YES)osenvironrk)r es r#_get_pkg_cmd_environzDistro._get_pkg_cmd_environs% JOO  !& r%cX|jd|jdgtdS)Nzupdate-sourcesr)freq)_runnerrunpackage_commandr)r s r#update_package_sourceszDistro.update_package_sourcess<    J      r%)F)N)__name__ __module__ __qualname____doc__rnetworking_cls usr_lib_execrfrl ci_sudoers_fngroup_add_cmd_prefixpkg_cmd_install_prefixpkg_cmd_remove_prefixpkg_cmd_update_prefixpkg_cmd_upgrade_prefix prefer_fqdnr:rDr$r-rTrXrKrarvr}rr*r%r#r r s$ 'N#L%M.BM111#Y/"H-"H-#Y/KH,S,3,,,,*FFF7;7;7;r 8     r%r )rzriiorcloudinit.distros.bsd cloudinitrloggingrrcloudinit.distros.networkingrcloudinit.settingsr getLoggerrr@distrosbsdBSDr r*r%r#rs $$$$$$ ::::::++++++g!!l l l l l Y  " &l l l l l r%