
    g8              
          S SK Jr  S SKJr  S SKJrJrJrJ	r	  S SK
Jr  S SKJrJr  S SKJr  S SKJrJrJrJr  S rS S	 jrS!S
 jrS rS rS r\\\R8                  \R8                  \\R8                  \\\S.	rS r/ SQr SS/r!/ SQr" " S S\5      r# " S S\#5      r$ " S S\#5      r% " S S\#5      r& " S S\#5      r' " S S\	5      r(g)"    N)SCOPE_SUBTREE)CommandCommandErrorOptionSuperCommand)misc)MessageElementLdbError)string_is_guid)string_from_nt_timent_time_from_stringnt_nowtimedelta_from_nt_time_deltac                 H    U R                  5       nUR                  S5        U$ )NzACN=Master Root Keys,CN=Group Key Distribution Service,CN=Services)get_config_basedn	add_child)ldbbase_dns     B/usr/lib/python3/dist-packages/samba/netcmd/domain/kds/root_key.pyroot_key_base_dnr   #   s'    ##%GKMN    c                    [        [        U5      5      (       a  SnOSnUc  S/n[        U 5      nSU SU S3nU R                  U[        UUS9n[        U5      S:X  a  [        S	U 35      e[        U5      S
:w  a  [        SU 35      eUS   $ )Nnamedn*z$(&(objectClass = msKds-ProvRootKey)(z = z)))scope
expressionattrsr   zno such root key:    zduplicate root keys matching )r   strr   searchr   lenr   )r   r   r   keyr   r   ress          r   get_root_key_by_name_or_dnr%   *   s    c$i  }s#GU#dV2'J **W( *   "C
 3x1}/v677
3x1}:4&ABBq6Mr   c                 X    Uc  S/n[        U 5      nU R                  U[        SUS/S9nU$ )Nr   z!(objectClass = msKds-ProvRootKey)z"server_sort:1:1:msKds-UseStartTime)r   r   r   controls)r   r!   r   )r   r   nr   r$   s        r   get_sorted_root_keysr)   F   sD    }s#G
**W( C CD	  FC Jr   c                 L   [        U 5      nUR                  5       n[        U5      nUS:  a  gSnUS:  a  U[        U5       S3-  nOJUS:  a  U[        US-  5       S3-  nO/US	:  a  U[        US
-  5       S3-  nOU[        US-  5       S3-  nUS::  a  US-  nU$ US-  nU$ )z5Turn a datetime.timedelta into an approximate string.   z	about nowzabout x   z secondsi   <   z minutesi  i  z hoursiQ z daysr   z agoz in the FUTURE)r   total_secondsabsint)dtdsecsabsolutess        r   delta_stringr6   U   s    	%a	(BD4yH!|A#~	Hh''	D	HrM"#8,,	I		HtO$%V,,	H	*+,E22qy	V H 	
Hr   c                 @    [        [        R                  " U 5      5      $ N)r    r   GUID)vs    r   guid_to_stringr;   q   s    tyy|r   c                 .    [        U 5      n [        U 5      $ r8   )r0   r   )nt_times    r   string_from_nt_time_stringr>   u   s    'lGw''r   )	msKds-UseStartTimemsKds-CreateTimemsKds-RootKeyDatamsKds-SecretAgreementParam
objectGUIDmsKds-KDFParammsKds-PublicKeyLengthmsKds-PrivateKeyLengthmsKds-Versionc                     [         R                  U S 5      n[        U[        5      (       d  U" U5      $ [	        U5      S:X  a  U" US   5      $ U Vs/ s H
  o2" U5      PM     sn$ s  snf )z^Convert an attribute into a printable form, using the attribute
name to guess the best format.c                     [        U 5      $ r8   )r    )xs    r   <lambda>encode_by_key.<locals>.<lambda>   s    3q6r   r   r   )ENCODERSget
isinstancer	   r"   )kr:   fnrJ   s       r   encode_by_keyrR      s_     
a)	*Ba((!u
1v{!A$x1aBqE1s   A')r   r?   r@   rA   rB   )whenCreatedwhenChangedrC   zmsKds-KDFAlgorithmIDrD   z msKds-SecretAgreementAlgorithmIDrE   rF   rG   zmsKds-DomainIDcnc                   *    \ rS rSrSr    SS jrSrg)RootKeyCommand   z=Base class with a common method for presenting root key data.Nc                 x   US:X  aT  0 nUb  XFS'   UR                  5        H%  u  pxU(       d  U[        ;   a  M  [        Xx5      Xg'   M'     U R                  U5        g Uc
  [	        5       n[        US   S   5      n	[        US   S   5      n
[        X-
  5      n[        X-
  5      nUb  U R                  U5        U R                  SUS    35        U R                  S[        U	5       S	U S
35        U R                  S[        U
5       S	U S
35        U(       a:  [         H0  nX   S   R                  5       nU R                  SUS SU 35        M2     U Vs/ s H  ow[        [        -   ;  d  M  UPM     nnU H)  n[        XqU   5      nU R                  SUS SU 35        M+     U R                  S5        g s  snf )NjsonmessagezmsKds-createTimer   r?   zname r   z   created         ()z   usable from    z   14  )itemsSECRET_ATTRSrR   
print_jsonr   r0   r6   r[   r   hex
BASE_ATTRS)selfmsgoutput_formatshow_secretspreamblenowoutrP   r:   create_time
start_timecreate_delta_stringstart_delta_stringremaining_keyss                 r   show_root_key_message$RootKeyCommand.show_root_key_message   s   
 F"C#!)I		#\(9&q, $ OOC ;(C#01!4512156
*;+<=)**:;LL"uS[M*+)*=k*J)K2NaMbbcde)*=j*I)J"M_L``abc!F1IMMOs1R&!-. " &)OSZ,5N,N!SOAaQ(ALL3qfAaS)*   	R Ps   F7.F7 )NFNN)__name__
__module____qualname____firstlineno____doc__rr   __static_attributes__rt   r   r   rW   rW      s    G,0+0'+"&	)r   rW   c            	           \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSSSS	S
9\" SSS9\" SSSSS9/r  SS jrSrg)cmd_domain_kds_root_key_create   zCreate a KDS root key object.%prog [-H <URL>] [options]	sambaoptscredoptshostopts--jsonOutput results in JSON format.rh   store_constrZ   helpdestactionconstz--use-start-timez#Use of the key begins at this time.r   -v	--verbose
Be verbose
store_truer   r   Nc                 p   0 nUb   [        U5      nXS'   U R                  XU5      n
U
R                  " S0 UD6nUR                  5       n[        S S  nU(       a	  U[        -  n[        XUS9n[        US   S   5      nS[        U5       S[        U[        5       -
  5       S3nSU S	U 3nU(       a  U R                  UUU S
3S9  g US:X  a5  U Vs0 s H	  nUUU   _M     nnU R                  " SU[        U5      S.UD6  g U R!                  U5        g ! [         a  n	[        U	5      S eS n	A	ff = fs  snf )Nuse_start_time)r   r?   r   zusable from r\   r]   zcreated root key z, 
)rj   rZ   )r[   r   rt   )r   
ValueErrorr   ldb_connectnew_gkdi_root_keyget_rdn_valuere   VERBOSE_ATTRSr%   r0   r   r6   r   rr   print_json_statusr    r[   )rf   r   r   r   rh   r   verbosekwargsnt_useer   r   guidr   rg   rn   used_from_stringr[   rP   s                      r   run"cmd_domain_kds_root_key_create.run   sm   %0,^<+1'( xH="",V,!1]"E(%@12156
*+>z+J*K L  ,Z&(-B CDAG &dV2.>-?@&&s'43:)2 ' @ f$)./AaQiF/""I7s2wI&ILL!7  0"1o4/00 0s   D D3
D0D++D0rt   NNNNNNru   rv   rw   rx   ry   synopsisoptionsSambaOptionsCredentialsOptionsHostOptionstakes_optiongroupsr   takes_optionsr   rz   rt   r   r   r|   r|      st    '+H ))..'' 	x>#M	I!(MNt[|LI	M ;?=A""r   r|   c            	           \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSS9\" SS	S
SSS9/rSS jrSrg)cmd_domain_kds_root_key_deletei  zDelete a KDS root key.r~   r   --namezThe key to deleter   r   r   rh   r   rZ   r   Nc                 @   U R                  XU5      n [        Xd5      nUR	                  UR
                  5        UR
                  R                  5       n	SU	 3n
US:X  a  U R                  U
5        g U R                  U
5        g ! [         a  n[        U5      eS nAff = f)Nzdeleted root key rZ   )	r   r%   r
   r   deleter   r   r   r[   )rf   r   r   r   r   rh   r   root_keyr   r   r[   s              r   r   "cmd_domain_kds_root_key_delete.run)  s    xH=	"1#<H 	

8;;{{((*%dV,F"""7+LL!  	"q/!	"s   B 
BBBrt   )NNNNNr   rt   r   r   r   r     s]     +H ))..'' 	x12x>#M	IM"r   r   c            
           \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSSSS	9\" S
SSS	9\" SSSSSS9/r  SS jrSrg)cmd_domain_kds_root_key_listi;  zList KDS root keys.r~   r   r   r   r   r   r   --show-secretsShow root key hashr   r   rh   r   rZ   r   Nc                 l   U R                  XU5      n[        S S  nU(       a	  U[        -  nU(       a	  U[        -  n[	        Xx5      n	US:X  a`  / n
U	R
                   H<  n0 nU
R                  U5        UR                  5        H  u  p[        X5      X'   M     M>     U R                  U
5        g [        U	5      S:X  a  U R                  S5        g U R                  [        U	5       S[        U	5      S:  a  SOS S35        [        5       nU	 H&  nU R                  UUUUS	9  U R                  S5        M(     g )
NrZ   r   zno root keys found.z	 root keyr   r5   r`   z found.
)ri   rk   )r   re   rb   r   r)   msgsappendra   rR   rc   r"   r[   r   rr   )rf   r   r   r   r   ri   rh   r   r   r$   rl   rg   mrP   r:   rk   s                   r   r    cmd_domain_kds_root_key_list.runM  s   xH=1\!E]"E"3.F"Cxx

1IIKDA(.AD (   OOC s8q=LL./Cz#c(Q,3B*GyQRhC&&s'44@+. ' 0 LL r   rt   r   r   rt   r   r   r   r   ;  sx    +H ))..'' 	t[|LI&:<Px>#M	IM IM-1%r   r   c                       \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSS9\" SS	S
S9\" SSSS
S9\" SSS
S9\" SSSSSS9/r   SS jrSrg)cmd_domain_kds_root_key_viewiu  zView a root key object.r~   r   r   z!Choose thhe key to view (by GUID)r   z--latestzView the latest keyr   r   r   r   r   r   r   r   r   rh   r   rZ   r   Nc	                 T   U R                  XU5      n	[        [        -   n
U(       a	  U
[        -  n
U(       a  U
S/-  n
U(       a9  Ub  [	        S5      e[        X5      n[        U5      S:X  a  [	        S5      eUS   nOUb  [        XU
5      nO[	        S5      eU R                  UUUS9  g )Nr   z0It makes no sense to combine --name and --latestr   zno root keys foundzPPLease use '--name <GUID>' or '--latest'  (try the 'list' command to find names))ri   )	r   re   r   rb   r   r)   r"   r%   rr   )rf   r   r   r   r   rh   ri   r   latestr   r   r$   rg   s                r   r    cmd_domain_kds_root_key_view.run  s     xH= ]*\!EcUNE"#UVV&s2C3x1}"#788a&C,S>C  I J J 	""3#00< 	# 	>r   rt   )NNNNNNNNr   rt   r   r   r   r   u  s    !+H ))..'' 	xABz 5lKt[|LI&:<Px>#M	IM ;?FJ$>r   r   c                   N    \ rS rSrSr\" 5       \" 5       \" 5       \" 5       S.r	Sr
g)cmd_domain_kds_root_keyi  z*Manage key distribution service root keys.)creater   listviewrt   N)ru   rv   rw   rx   ry   r|   r   r   r   subcommandsrz   rt   r   r   r   r     s&    4 1202,.,.	Kr   r   r8   )NN))samba.getoptgetoptr   r   r   samba.netcmdr   r   r   r   samba.dcerpcr   r	   r
   sambar   samba.nt_timer   r   r   r   r   r%   r)   r6   r;   r>   bytesrd   r0   rM   rR   re   rb   r   rW   r|   r   r   r   r   rt   r   r   <module>r      s   *   D D  (  9 988( 52"')) ii !
 
 $,.+W +\4"^ 4"n "^  "F7> 7t8>> 8>vl r   