
    Vh                        d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d d	lmZ dd
Z G d de      Zy)    )annotationsN)abstractmethod)choice)ascii_lowercase)dgettext)AnsibleError)to_bytes)AnsiblePluginc                D    dj                  d t        |       D              S )zH return random string used to identify the current privilege escalation  c              3  :   K   | ]  }t        t                y wN)r   r   ).0xs     O/home/dcms/DCMS/lib/python3.12/site-packages/ansible/plugins/become/__init__.py	<genexpr>z_gen_id.<locals>.<genexpr>   s     Bq6/*Bs   )joinrange)lengths    r   _gen_idr      s    77BE&MBBB    c                       e Zd ZdZ e       Z e       ZdZdZ fdZ	d fd	Z
d ZddZed        Zd	 Zd
 Zd Zd Zd Z xZS )
BecomeBaseNFr   c                F    t         t        |           d| _        d| _        y )Nr   )superr   __init___idsuccess)self	__class__s    r   r   zBecomeBase.__init__&   s    j$(*r   c                z    	 t         t        |   ||      S # t        $ r g d}||vr t	        ||d      cY S w xY w)z Overrides the base get_option to provide a fallback to playcontext vars in case a 3rd party plugin did not
        implement the base become options required in Ansible. )hostvars)become_userbecome_passbecome_flags
become_exeN)r   r   
get_optionKeyErrorgetattr)r   optionr"   playcontextpc_fallbackr    s        r   r'   zBecomeBase.get_option+   sM    	6T5fx5PP 	6VK[(;55	6s    ::c                @    | j                   xr | j                  d      S )zThis function assists connection plugins in determining if they need to wait for
        a prompt. Both a prompt and a password are required.
        r$   )promptr'   )r   s    r   expect_promptzBecomeBase.expect_prompt8   s     {{=t}==r   c           	     N   t        ||| j                  f      s|S 	 t        j                  |j                  d| j                  d|j
                  d|      }t        |dd       }|r	|s|d|}|S # t        $ r' t        d|j                  d| j                  d      w xY w)N zThe z' shell family is incompatible with the z become plugin
executablez -c )allr   shlexquoteECHOCOMMAND_SEPAttributeErrorr   SHELL_FAMILYnamer)   )r   cmdshellnoexeexes        r   _build_success_commandz!BecomeBase._build_success_command>   s    C-.J	B++uzz4<<IZIZ\_`aC e\40u #S)C
  	Bbgbtbtvzvv   A  B  B	Bs   >A4 40B$c                J    t               | _        d| j                  z  | _        y )NzBECOME-SUCCESS-%s)r   r   r   )r   r;   r<   s      r   build_become_commandzBecomeBase.build_become_commandL   s    9*TXX5r   c                t    t        | j                        t        fd|j                  d      D              S )Nc              3  B   K   | ]  }|j                         v   y wr   )rstrip)r   l	b_successs     r   r   z+BecomeBase.check_success.<locals>.<genexpr>S   s     Nq9
*Ns   T)r	   r   any
splitlines)r   b_outputrF   s     @r   check_successzBecomeBase.check_successQ   s-    T\\*	NH4G4G4MNNNr   c                    | j                   rEt        | j                         j                         t        fd|j	                         D              S y)z; checks if the expected password prompt exists in b_output c              3  \   K   | ]#  }|j                         j                         % y wr   )strip
startswith)r   rE   b_prompts     r   r   z3BecomeBase.check_password_prompt.<locals>.<genexpr>Y   s"     U!qwwy++H5Us   ),F)r.   r	   rM   rG   rH   )r   rI   rO   s     @r   check_password_promptz BecomeBase.check_password_promptU   s>    ;;,224HUx?R?R?TUUUr   c                P    t        t        | j                  |            }|xr ||v S )zM returns True/False if domain specific i18n version of msg is found in b_out )r	   r   r:   )r   b_outmsgb_fails       r   _check_password_errorz BecomeBase._check_password_error\   s&    (499c23)&E/)r   c                N    | j                   D ]  }| j                  ||      s y yNTF)failrU   r   rI   	errstrings      r   check_incorrect_passwordz#BecomeBase.check_incorrect_passworda   s-     	I))(I>	 r   c                N    | j                   D ]  }| j                  ||      s y yrW   )missingrU   rY   s      r   check_missing_passwordz!BecomeBase.check_missing_passwordg   s-     	I))(I>	 r   )NN)F)__name__
__module____qualname__r:   tuplerX   r]   require_ttyr.   r   r'   r/   r?   r   rA   rJ   rP   rU   r[   r^   __classcell__)r    s   @r   r   r      sh    D 7DgG K F
6> 6 6O*
r   r   )    )
__future__r   r4   abcr   secretsr   stringr   gettextr   ansible.errorsr   +ansible.module_utils.common.text.convertersr	   ansible.pluginsr
   r   r    r   r   <module>ro      s6    #    "  ' @ )C
T Tr   