o
    Žõ±jj  ã                   @   sN   d dl mZ d dlZd dlZd dlZ	 G dd„ dƒZg ZdZG dd„ dƒZdS )é    ©ÚloggerNc                   @   s   e Zd Zdd„ ZdS )ÚLDAPCMDArgsc                 C   s    d | _ d| _d| _ddg| _d S )Nr   FÚloginÚi)ÚurlÚverboseÚno_interactiveÚcommands©Úself© r   úŠ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/ldap/cmdhelper.pyÚ__init__   s   zLDAPCMDArgs.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s    r   z>FOR AVAILABLE SUBCOMMANDS TYPE "... ldap help" insted of "-h" c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚLDAPCMDHelperc                 C   s   dg| _ dg| _d S )NÚldap)Úlive_keywordsÚkeywordsr   r   r   r   r      s   zLDAPCMDHelper.__init__c           
      C   sô   |j ddd�}| ¡ }d|_d|_|j ddd�}|jdd	d
ddd� |jddd� |jdddd� tjdd�}|jdd�}d|_d|_|j ddtd�}|jddd� |jdddgddd � |jdd	d
ddd� |jdddd� |j dd!|gd"�}	d S )#Nr   zLDAP related commands)ÚhelpTÚldap_moduleÚclientzHLDAP client. Use "help" instead of "-h" to get the available subcommandsz-vz	--verboseÚcountr   zVerbosity, can be stacked)ÚactionÚdefaultr   r   zLDAP connection stringr
   Ú*z¯!OPTIONAL! Takes a series of commands which will be executed until error encountered. If the command is 'i' is encountered during execution it drops back to interactive shell.)Únargsr   F)Úadd_helpz7LIVE LDAP commands work under the current user context.ÚliveldapcommandzOLDAP (live) client. Use "help" instead of "-h" to get the available subcommands)r   Úepilogz--hostzSpecify a custom logon server.z--authmethodÚntlmÚkerberosz)Authentication method to use during login)Úchoicesr   r   zLDAP (live) commands)r   Úparents)Ú
add_parserÚadd_subparsersÚrequiredÚdestÚadd_argumentÚargparseÚArgumentParserÚmsldap_epilog)
r   ÚparserÚlive_parserÚ
ldap_groupÚldap_subparsersÚldap_client_groupÚlive_subcommand_parserÚlive_ldap_subparsersÚlive_client_parserÚ
live_groupr   r   r   Úadd_args    s$   zLDAPCMDHelper.add_argsc                 C   sT   |j | jv r|  |¡ t| jƒdkr$|j dkr&|j| jv r(|  |¡ d S d S d S d S )Nr   Úlive)Úcommandr   ÚrunÚlenr   ÚmoduleÚrun_live)r   Úargsr   r   r   Úexecute:   s
   
$ÿzLDAPCMDHelper.executec                 C   sJ  ddl m} ddlm} ddlm} |ƒ }|d }|jd ur!|j}d|j|d |d |f }|jdkr9| 	d	¡ n|jd
krLt
d| ƒ |j	tjd� nd|j }|j	|d� |jdkr£tƒ }	||	_|j|	_|jd uršt|jƒdkršg |	_|jd dkr�dg|	_n|jd dkrŽ|	j d¡ |jD ]}
|	j |
¡ q‘t ||	ƒ¡ d S d S )Nr   r   ©Úamain)Úget_logon_infoÚlogonserverzldap+sspi-%s://%s\%s@%sÚdomainÚusernameéd   é   z*Using the following auto-generated URL: %s)Úlevelé   r   r   r   )Úmsldapr   Úmsldap.examples.msldapclientrA   Úwinacl.functions.highlevelrB   ÚhostÚ
authmethodr   ÚsetLevelÚprintÚloggingÚINFOr    r   r   r
   r;   ÚappendÚasyncior:   )r   r>   Ú
ldaploggerrA   rB   ÚinforC   Úldap_urlrH   Úlar9   r   r   r   r=   B   s:   






ðzLDAPCMDHelper.run_livec                 C   sª   ddl m} |jdkrStƒ }|j|_|j|_|jd urJt|jƒdkrJg |_|jd dkr1dg|_n|jd dkr>|j d¡ |jD ]}|j |¡ qAt	 
||ƒ¡ d S d S )Nr   r@   r   r   r   )rK   rA   r   r   r   r   r
   r;   rS   rT   r:   )r   r>   rA   rX   r9   r   r   r   r:   j   s   


ñzLDAPCMDHelper.runN)r   r   r   r   r7   r?   r=   r:   r   r   r   r   r      s    (r   )	Úpypykatzr   rT   r+   rQ   r   Úmsldap_subcommand_listr-   r   r   r   r   r   Ú<module>   s   