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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dS )    N)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_spn_listzList spns of a given user.z%prog <user> [options]	sambaoptscredoptsversionopts-H--URL%LDB URL for database or target serverURLHhelptypemetavardestuserNc                 C   s   |  }||}t|t ||d}t|\}	}
}| j|	d  |jdt	|	 tj
dgd}t|dkr|d d}|d ur| jd|d j  |D ]}| jd|  qq| jd	|d j  ntd
| d S )NZsession_infoZcredentialslp
samaccountname=%sservicePrincipalName
expressionscopeattrsr   z1User %s has the following servicePrincipalName: 
z	 %s
z$User %s has no servicePrincipalName
User %s not found)get_loadparmget_credentialsr   r   r   Zoutfwritesearchldbbinary_encodeSCOPE_SUBTREElengetdnr   )selfr   r   r   r   r   r   credssamcleaneduserrealmdomainresspnse r6   2/usr/lib/python3/dist-packages/samba/netcmd/spn.pyrun1   s2    
zcmd_spn_list.run)NNNN__name__
__module____qualname____doc__ZsynopsisoptionsZSambaOptionsZCredentialsOptionsZVersionOptionsZtakes_optiongroupsr   strZtakes_optionsZ
takes_argsr8   r6   r6   r6   r7   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_spn_addzCreate a new spn.z%prog <name> <user> [options]r
   r   r   r   r   r   r   namer   Nc                 C   sP  |  }||}t|t ||d}	|	jdt| tjd}
t|
dkrVt	d| t
|\}}}|	jdt| tjdgd}
t|
dkr@|
d j t }|
d d}g }d	}tj}|d ur|D ]"}t||krd
}|t| qtj}|| |
d j|_t||d|d< |s.|	| nt	d||f nt	d| d S )Nr   servicePrincipalName=%s)r   r    r   z5Service principal %s already affected to another userr   r   r   FTz+Service principal %s already affected to %sr"   )r#   r$   r   r   r&   r'   r(   r)   r*   r   r   r,   Messager+   ZFLAG_MOD_ADDr?   appendFLAG_MOD_REPLACEMessageElementmodify)r-   rA   r   r   r   r   r   r   r.   r/   r3   r0   r1   r2   msgr4   tabfoundflagr5   r6   r6   r7   r8   _   sT    


zcmd_spn_add.run)NNNNr9   r6   r6   r6   r7   r@   O   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_spn_deletezDelete a spn.z%prog <name> [user] [options]r
   r   r   r   r   r   r   rA   zuser?Nc                 C   sr  |  }||}t|t ||d}	|	jdt| tjddgd}
t|
dkrbd }|d urt	|\}}}|
D ]}t
|d  |krp|}qp|d u rtd||f nFt|
dkrd	}|
D ]}d
|t
|jf }qtd||f n|
d }t }|d}g }|d ur<|D ]"}t
||kr|t
| qtj}|j|_t||d|d< |	| ntd| d S )Nr   rB   r   ZsamAccountNamer   r   z"Unable to find user %s with spn %s    z%s
%szdMore than one user has the spn %s and no specific user was specified, list of users with this spn:%sz!Service principal %s not affected)r#   r$   r   r   r&   r'   r(   r)   r*   r   r?   lowerr   r,   rC   r+   rD   rE   rF   rG   )r-   rA   r   r   r   r   r   r   r.   r/   r3   resultr0   r1   r2   elemZlistUserrrH   r4   rI   r5   rK   r6   r6   r7   r8      sV    


zcmd_spn_delete.run)NNNNNr9   r6   r6   r6   r7   rL      s     rL   c                   @   s2   e Zd ZdZi Ze ed< e ed< e ed< dS )cmd_spnz(Service Principal Name (SPN) management.addlistdeleteN)r:   r;   r<   r=   Zsubcommandsr@   r	   rL   r6   r6   r6   r7   rS      s
   

rS   )Zsamba.getoptZgetoptr>   r'   Zsamba.samdbr   Z
samba.authr   Zsamba.netcmd.commonr   Zsamba.netcmdr   r   r   r   r	   r@   rL   rS   r6   r6   r6   r7   <module>   s   /=@