�
܍~c� � � � d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZm Z d dl
mZ d dlm
Z
ej e� � Z G d� dej j j � � ZdS ) � N)�StringIO)�log)�subp�util)�FreeBSDNetworking)�PER_INSTANCEc � � e Zd ZdZeZdZdZdZdZ g d�Z
ddgZdd gZdd
gZ
ddgZdZd
Zdedefd�Zd� Zd� Zd� Zdd�Zd� Zdd�Zd� Zd� ZdS )�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�update�upgradeTz /usr/home�action�servicec � � | j }|dg|dg|dg|dg|dg|dg|dg|dgd�}t |� � t || � � z }t j |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�disable�restart�status)r r r r r �reloadz
try-reloadr T)�capture)�init_cmd�listr )�selfr r r �cmds�cmds �;/usr/lib/python3/dist-packages/cloudinit/distros/freebsd.py�manage_servicezDistro.manage_service( s� � � �=���f�%��w�'���)���+���+�� �*�"�I�.���)�
�
�� �8�n�n�t�D��L�1�1�1���y��d�+�+�+�+� c � � ddd|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= s � ��i��{�D�*�E�Er% c �P � t j |� � rt � d|� � dS ddd|g}ddd|g}dddd d
dd�}d
ddd�}|� � � D ]z\ }}||v r5|r3t |t � � r|� || |g� � �>||v r8|r6|� || � � |� || � � �{d|v sd|v r+|� d� � |� d� � n�|� d� | j
|�� � � � |� d� � |� d� | j
|�� � � � |� d� � t � d|� � t j ||�� � n*# t $ r t j
t d|� � � w xY w|� dd � � } | �| � || d�� � d S d S )Nz!User %s already exists, skipping.Fr �useraddr( z-dz-cz-gr) z-sz-E)�homedir�gecos�
primary_group�groups�shell�inactivez--no-user-groupz--systemz
--no-log-init)�
no_user_group�system�no_log_init�no_create_homer7 z-d/nonexistentz-d{home_dir}/{name})�home_dir�namez-mzAdding user %s)� logstringzFailed to create user %s�passwdT)�hashed)r �is_user�LOG�info�items�
isinstance�str�extend�append�formatr: r � Exception�logexc�get�
set_passwd)
r r; �kwargs�pw_useradd_cmd�log_pw_useradd_cmd�pw_useradd_opts�pw_useradd_flags�key�val�
passwd_vals
r# �add_userzDistro.add_user@ s� � ��<���� ��H�H�8�$�?�?�?��5�� �4��6��"�I�t�T�:�� ��!����
�
�� /� �*�
�
�� ����� A� A�H�C���o�%�%�#�%�*�S�#�2F�2F�%��%�%��s�';�S�&A�B�B�B�B��(�(�(�S�(��%�%�&6�s�&;�<�<�<�"�)�)�*:�3�*?�@�@�@���v�%�%��V�);�);��!�!�"2�3�3�3��%�%�&6�7�7�7�7��!�!�%�,�,�d�m�$�,�O�O�
�
�
�
�!�!�$�'�'�'��%�%�%�,�,�d�m�$�,�O�O�
�
�
�
�%�%�d�+�+�+� ���!�4�(�(�(� ��I�n�0B�C�C�C�C�C��� � � ��K��7��>�>�>�� ����
�Z�Z��$�/�/�
��!��O�O�D�*�T�O�:�:�:�:�:� "�!s �3G
�
'G1c � � t j dd|ddg� � d S # t $ r t j t d|� � � w xY w)Nr r' |