a
    I_+                     @   s   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mZmZmZ G dd	 d	eZG d
d deZG dd deZG dd deZG dd deZG dd deZdS )    N)	provision)dsdb)SamDB)system_session)_get_user_realm_domain)CommandCommandErrorSuperCommandOptionc                   @   sL   e Zd ZdZdZejejejdZ	e
dddeddd	gZd
gZdddZdS )cmd_delegation_showz*Show the delegation setting of an account.z%prog <accountname> [options]	sambaoptscredoptsversionopts-H--URL%LDB URL for database or target serverURLHhelptypemetavardestaccountnameNc                 C   s<  |  }||}t||d}|d u r4|j}	n|}	t|	t ||d}
t|\}}}|
j	dt
| t
jddgd}t|dkrtd| t|d	ksJ t|d dd }|d d}| jd
t|d j  | jdt|tj@   | jdt|tj@   |d ur8|D ]}| jd|  q d S )NrealmZsession_infoZcredentialslpsAMAccountName=%sZuserAccountControlmsDS-AllowedToDelegateToZ
expressionZscopeattrsr    Unable to find account name '%s'   zAccount-DN: %s
zUF_TRUSTED_FOR_DELEGATION: %s
z.UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION: %s
zmsDS-AllowedToDelegateTo: %s
)get_loadparmget_credentialsr   provision_paths_from_lpgetsamdbr   r   r   searchldbbinary_encodeSCOPE_SUBTREElenr   intZoutfwritestrdnboolr   UF_TRUSTED_FOR_DELEGATION)UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION)selfr   r   r   r   r   r   credspathspathsamcleanedaccountr   domainresZuacZalloweda r>   9/usr/lib/python3/dist-packages/samba/netcmd/delegation.pyrun6   s>    

zcmd_delegation_show.run)NNNN__name__
__module____qualname____doc__ZsynopsisoptionsZSambaOptionsZCredentialsOptionsZVersionOptionsZtakes_optiongroupsr
   r0   Ztakes_optionsZ
takes_argsr@   r>   r>   r>   r?   r   $   s   
r   c                   @   sN   e Zd ZdZdZejejejdZ	e
dddeddd	gZd
dgZdddZdS )cmd_delegation_for_any_servicez3Set/unset UF_TRUSTED_FOR_DELEGATION for an account.(%prog <accountname> [(on|off)] [options]r   r   r   r   r   r   r   r   onoffNc              
   C   s   d}|dkrd}n|dkr d}nt d| | }||}	t||d}
|d u r`|
j}n|}t|t |	|d}t	|\}}}dt
| }tj}z|j||d	|dd
 W n, ty } zt |W Y d }~n
d }~0 0 d S )NFonToff0invalid argument: '%s' (choose from 'on', 'off')r   r   r   zTrusted-for-DelegationZ	flags_strrJ   strict)r   r$   r%   r   r&   r'   r(   r   r   r   r*   r+   r   r3   toggle_userAccountFlags	Exceptionr5   r   rI   r   r   r   r   rJ   r   r6   r7   r8   r9   r:   r   r;   Zsearch_filterflagerrr>   r>   r?   r@   n   s2    

z"cmd_delegation_for_any_service.run)NNNNrA   r>   r>   r>   r?   rG   \   s   
  rG   c                   @   sN   e Zd ZdZdZejejejdZ	e
dddeddd	gZd
dgZdddZdS )cmd_delegation_for_any_protocolzOSet/unset UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION (S4U2Proxy) for an account.rH   r   r   r   r   r   r   r   r   rI   Nc              
   C   s   d}|dkrd}n|dkr d}nt d| | }|j|dd}	t||d}
|d u rd|
j}n|}t|t |	|d}t	|\}}}d	t
| }tj}z|j||d
|dd W n, ty } zt |W Y d }~n
d }~0 0 d S )NFrJ   TrK   rL   )Zfallback_machiner   r   r   z&Trusted-to-Authenticate-for-DelegationrM   )r   r$   r%   r   r&   r'   r(   r   r   r   r*   r+   r   r4   rO   rP   rQ   r>   r>   r?   r@      s2    
z#cmd_delegation_for_any_protocol.run)NNNNrA   r>   r>   r>   r?   rT      s   
  rT   c                   @   sN   e Zd ZdZdZejejejdZ	e
dddeddd	gZd
dgZdddZdS )cmd_delegation_add_servicez4Add a service principal as msDS-AllowedToDelegateTo.)%prog <accountname> <principal> [options]r   r   r   r   r   r   r   r   	principalNc              
   C   s
  |  }||}t||d}	|d u r4|	j}
n|}
t|
t ||d}t|\}}}|j	dt
| t
jdgd}t|dkrtd| t|dksJ t
 }|d j|_t
|gt
jd|d< z|| W n. ty } zt|W Y d }~n
d }~0 0 d S 	Nr   r   r   r   r    r   r"   r#   )r$   r%   r   r&   r'   r(   r   r   r   r)   r*   r+   r,   r-   r   Messager1   MessageElementZFLAG_MOD_ADDmodifyrP   r5   r   rW   r   r   r   r   r   r6   r7   r8   r9   r:   r   r;   r<   msgrS   r>   r>   r?   r@      s:    
zcmd_delegation_add_service.run)NNNNrA   r>   r>   r>   r?   rU      s   
  rU   c                   @   sN   e Zd ZdZdZejejejdZ	e
dddeddd	gZd
dgZdddZdS )cmd_delegation_del_servicez7Delete a service principal as msDS-AllowedToDelegateTo.rV   r   r   r   r   r   r   r   r   rW   Nc              
   C   s
  |  }||}t||d}	|d u r4|	j}
n|}
t|
t ||d}t|\}}}|j	dt
| t
jdgd}t|dkrtd| t|dksJ t
 }|d j|_t
|gt
jd|d< z|| W n. ty } zt|W Y d }~n
d }~0 0 d S rX   )r$   r%   r   r&   r'   r(   r   r   r   r)   r*   r+   r,   r-   r   rY   r1   rZ   ZFLAG_MOD_DELETEr[   rP   r\   r>   r>   r?   r@     s:    
zcmd_delegation_del_service.run)NNNNrA   r>   r>   r>   r?   r^      s   
  r^   c                   @   sF   e Zd ZdZi Ze ed< e ed< e ed< e ed< e	 ed< dS )cmd_delegationzDelegation management.Zshowzfor-any-servicezfor-any-protocolzadd-servicezdel-serviceN)
rB   rC   rD   rE   Zsubcommandsr   rG   rT   rU   r^   r>   r>   r>   r?   r_   2  s   



r_   )Zsamba.getoptZgetoptrF   r*   Zsambar   r   Zsamba.samdbr   Z
samba.authr   Zsamba.netcmd.commonr   Zsamba.netcmdr   r   r	   r
   r   rG   rT   rU   r^   r_   r>   r>   r>   r?   <module>   s   85566