name : freebsd.cpython-39.opt-1.pyc
a

'�Dg"�@s|ddlZddlZddlZddlmZddlZddlmZmZddl	m
Z
ddlmZm
Z
e�e�ZGdd�dejjj�ZdS)�N)�StringIO)�subp�util)�FreeBSDNetworking)�
PER_ALWAYS�PER_INSTANCEc@seZdZdZeZdZdZdZdZ	gd�Z
ddgZdd	gZdd
gZ
ddgZdZd
ZdZdZgd�Zed3dd��Zedd�eeed�dd��Zdd�Zed�dd�Zdd�Zd4d d!�Zd"d#�Zd$d%�Zd5d&d'�Zd(d)�Z dd*�d+d,�Z!e"eeeeee#d-�d.d/��Z$e"edd0�d1d2��Z%dS)6�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)�pw�group�add�pkg�install�remove�updateZupgradeTz	/usr/homez/var/dbzdhclient.leases.\w+)z
^{username}::z^{username}:\*:z^{username}:\*LOCKED\*:NcCs8tj�d�}|dur"t�d�dStjdd|gd|d�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
        ZRC_PIDNz0Unable to reload rc(8): no RC_PID in Environment�killz-SIGALRMT�Zcapture�rcs)�os�environ�get�LOGZwarningr)�clsrZrc_pid�r�=/usr/lib/python3.9/site-packages/cloudinit/distros/freebsd.py�reload_init7s

zDistro.reload_init)r)�action�service�
extra_argsc
Gsx|j}|dg|dg|dg|dg|dg|dg|dg|dg|dg|dg|d	g|d
gd�}|||t|�}tj|d|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
        �stop�start�enable�enabled�disable�onestart�onestop�restart�status�	onestatus)rrr r!r"r#r$r%�reloadz
try-reloadr&r'Tr)�init_cmd�listr)rrrrrr)Zcmds�cmdrrr�manage_serviceEs 
�zDistro.manage_servicecCsddd|d|gS)Nr	�usermod�-n�-Gr)�self�member_nameZ
group_namerrr�_get_add_member_to_group_cmdasz#Distro._get_add_member_to_group_cmd)�returncKs�t�|�rt�d|�dSddd|g}ddd|g}dddd	d
ddd
�}dddd�}|��D]b\}}||vr�|r�t|ttf�r�|�||t|�g�qZ||vrZ|rZ|�	||�|�	||�qZd|vs�d|vr�|�	d�|�	d�nH|�
d|j�d|���}	|�	d|	�|�	d�|�	d|	�|�	d�t�d|�ztj||d�Wn$t
�ynt�td|��Yn0|�
dd�}
|
du�r�|j||
dd�dS)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	Zuseraddr.z-d�-cz-gr/z-sz-Ez-u)�homedirZgecosZ
primary_group�groups�shellZinactive�uidz--no-user-groupz--systemz
--no-log-init)Z
no_user_group�systemZno_log_initZno_create_homer9z-d/nonexistentr5�/z-mzAdding user %s)�	logstringzFailed to create user %s�passwdNT)�hashed)rZis_userr�info�items�
isinstance�str�int�extend�appendr�home_dirr�	Exception�logexc�
set_passwd)r0�name�kwargsZpw_useradd_cmdZlog_pw_useradd_cmdZpw_useradd_optsZpw_useradd_flags�key�valr5Z
passwd_valrrr�add_userdsR
�
�



zDistro.add_usercCs@zt�dd|ddg�Wn"ty:t�td|��Yn0dS)Nr	r-�-pz01-Jan-1970z"Failed to set pw expiration for %s�rrFrrGr)r0�userrrr�
expire_passwd�s
zDistro.expire_passwdFcCsX|r
d}nd}z"tjdd||dg|d|d�Wn"tyRt�td|��Yn0dS)	Nz-Hz-hr	r-�0zchpasswd for %s)�datar;zFailed to set password for %srO)r0rPr<r=Zhash_optrrrrH�s�
zDistro.set_passwdcCs@zt�dd|ddg�Wn"ty:t�td|��Yn0dS)Nr	r-z-w�noz)Failed to lock password login for user %srO�r0rIrrr�lock_passwd�s
zDistro.lock_passwdcCst�d|�dS)NzRDragonfly BSD/FreeBSD password lock is not reversible, ignoring unlock for user %s)r�debugrUrrr�
unlock_passwd�s�zDistro.unlock_passwdcCs�t�}t�|j���D]&}|�t�dd||��|�d�qt�|j|j	�t�
|j|���z t�
d|�t�d|jg�WnZtjy�t�td|�zt�|j	|j�Wn"ty�t�td|j�Yn0Yn0dS)Nz	^default:zdefault:lang=%s:�
zRunning cap_mkdb for %sZcap_mkdbzFailed to apply locale %szFailed to restore %s backup)rrZload_text_file�
login_conf_fn�
splitlines�write�re�sub�copy�login_conf_fn_bakZ
write_file�getvaluerrWrZProcessExecutionErrorrG�IOError)r0�localeZout_fnZnewconf�linerrr�apply_locale�s&��zDistro.apply_localecCsddiS)zJReturn environment vars used in FreeBSD package_command
        operationsZASSUME_ALWAYS_YESZYESr)r0rrr�_get_pkg_cmd_environ�szDistro._get_pkg_cmd_environ)�forcecCs$|jjd|jdg|rtntd�dS)Nzupdate-sourcesr)Zfreq)Z_runner�runZpackage_commandrr)r0rgrrr�update_package_sources�s
�zDistro.update_package_sources)�path�
lease_file�pid_file�	interface�config_filer3cCs"|d|d|g|rd||gn|gS)Nz-lrNr4r)rjrkrlrmrnrrr�build_dhclient_cmd�s�zDistro.build_dhclient_cmd)�devicer3cCst�dd|g�dS)NZ
camcontrolZeject)r)rprrr�eject_media�szDistro.eject_media)N)F)N)&�__name__�
__module__�__qualname__�__doc__rZnetworking_clsZusr_lib_execrZr`Z
ci_sudoers_fnZgroup_add_cmd_prefixZpkg_cmd_install_prefixZpkg_cmd_remove_prefixZpkg_cmd_update_prefixZpkg_cmd_upgrade_prefixZprefer_fqdnrEZdhclient_lease_directoryZdhclient_lease_file_regexZ#shadow_empty_locked_passwd_patterns�classmethodrrAr,r2�boolrMrQrHrVrXrerfri�staticmethodr*rorqrrrrrsT
��>

�r)Zloggingrr]�iorZcloudinit.distros.bsdZ	cloudinitrrZcloudinit.distros.networkingrZcloudinit.settingsrrZ	getLoggerrrrZdistrosZbsdZBSDrrrrr�<module>s


© 2025 Cubjrnet7