
    Fc>                         d dl Z d dlZe j                            d d           dej        d<   d dlmZmZ d dlZd dl	m
Z
 d dlmc mc 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mZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' dZ(dZ)e G d de                      Z*e G d de                      Z+ G d d          Z,dZ-dZ.e G d de
                      Z/e0dk    rdZ(dZ)d dl1Z1 e1j2                     dS dS )    Nz
bin/python1PYTHONUNBUFFERED)Enumunique)KDCBaseTest)DONT_USE_KERBEROS)krb5pac)SEC_CHAN_WKSTA)
ndr_unpack)DynamicTestCase)AES256_CTS_HMAC_SHA1_96AES128_CTS_HMAC_SHA1_96ARCFOUR_HMAC_MD5KDC_ERR_PREAUTH_REQUIRED
KRB_AS_REPKU_AS_REP_ENC_PART	KRB_ERRORKU_PA_ENC_TIMESTAMP	KU_TICKETPADATA_ENC_TIMESTAMPNT_ENTERPRISE_PRINCIPALNT_PRINCIPALNT_SRV_INSTFc                   8    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
 ZdS )TestOptions                   @         c                     | j         |z  S Nvalueselfxs     L/usr/lib/python3/dist-packages/samba/tests/krb5/as_canonicalization_tests.pyis_setzTestOptions.is_setD       zA~    N)__name__
__module____qualname__Canonicalize
Enterprise
UpperRealmUpperUserNameNetbiosRealmUPNRemoveDollar	AsReqSelfLastr-    r/   r,   r   r   8   sP        LJJML
CLID    r/   r   c                       e Zd ZdZdZd ZdS )CredentialsTyper   r   c                     | j         |z  S r&   r'   r)   s     r,   r-   zCredentialsType.is_setM   r.   r/   N)r0   r1   r2   UserMachiner-   r<   r/   r,   r>   r>   H   s-        DG    r/   r>   c                   &    e Zd Zd Zd Zd Zd ZdS )TestDatac                    || _         || _        |                     ||          | _        |                     ||          | _        t          j                            |          rt          }nt          }t          j        || j        g          | _        t          j                            |          r| j        | _        n't          j        t           d| j        g          | _        t          j                            |          | _        d S )N)	name_typenameskrbtgt)options
user_creds_get_username	user_name
_get_realmrealmr   r4   r-   r   r   r   PrincipalName_createcnamer:   snamer   r3   canonicalize)r*   rH   credsclient_name_types       r,   __init__zTestData.__init__S   s    ++GU;;__We44
!((11 	,6+ 5&t~.>@ @ @
 ''00 	EDJJ$9%h
-CE E EDJ'4;;GDDr/   c                 $   |                                 }t          j                            |          r|                                }t          j                            |          r|                                }n|                                }|S r&   )	get_realmr   r7   r-   
get_domainr5   upperlower)r*   rH   rR   rM   s       r,   rL   zTestData._get_realmg   su    !!#**733 	'$$&&E!((11 	"KKMMEEKKMMEr/   c                    |                                 }t          j                            |          r|                    d          r
|d d         }t          j                            |          r*|                                }d                    ||          }t          j                            |          r|	                                }|S )N$z{0}@{1})
get_usernamer   r9   r-   endswithr4   rV   formatr6   rX   )r*   rH   rR   namerM   s        r,   rJ   zTestData._get_usernameq   s    !!###**733 	c8J8J 	9D!((11 	1OO%%E##D%00D$++G44 	 ::<<Dr/   c                    d}|dd                     | j                  z   dz   z  }|d| j        z   dz   z  }|d| j        z   dz   z  }|dt	          | j                  z   dz   z  }|dt	          | j                  z   dz   z  }|S )	NzTest Data: zoptions = 'z{:08b}'zuser name = 'z, realm = 'z, cname = 'z, sname = ')r_   rH   rK   rM   strrO   rP   )r*   reps     r,   __repr__zTestData.__repr__|   s    }xt|<<<sBB/#55}tz)C//}s4:.44}s4:.44
r/   N)r0   r1   r2   rT   rL   rJ   re   r<   r/   r,   rC   rC   Q   sS        E E E(  	 	 	    r/   rC   tstkrb5cnnmchtstkrb5cnnusrc                        e Zd Ze fd            Zed             Zd Zd Z fdZd Z	d Z
d Zd	 Zd
 Zd Zd Z xZS )KerberosASCanonicalizationTestsc                 d    t                                                       d | _        d | _        d S r&   )super
setUpClassrI   machine_creds)cls	__class__s    r,   rl   z*KerberosASCanonicalizationTests.setUpClass   s.     r/   c                     d }d }t           D ]T}t          t          j        j                  D ]3} |||          r |||          }|                     d|||           4Ud S )Nc                     | t           j        k    r!t          j                            |          rdS | t           j        k    r!t          j                            |          rdS dS )z0 Filter out any mutually exclusive test options TF)r>   rA   r   r9   r-   r:   )ctrH   s     r,   skipzCKerberosASCanonicalizationTests.setUpDynamicTestCases.<locals>.skip   s_    _,,,,33G<< -t_,,,)0099 -t5r/   c                 r    d| j         z  }t          D ]$}|                    |          r|d|j         z  z  }%|S )Nz%sCredentialsz_%s)r`   r   r-   )rr   rH   r`   opts       r,   build_test_namezNKerberosASCanonicalizationTests.setUpDynamicTestCases.<locals>.build_test_name   sH    "RW,D" / /::g&& /USX-.DKr/   test)r>   ranger   r;   r(   generate_dynamic_test)rn   rs   rv   rr   r+   r`   s         r,   setUpDynamicTestCasesz5KerberosASCanonicalizationTests.setUpDynamicTestCases   s    	 	 		 	 	 " 	? 	?B;+122 ? ?4A;; &r1--))&$2>>>>	?	? 	?r/   c                     | j         D|                                 }|                     |t                    \  t	          |           _         }| j         S r&   )rI   	get_samdbcreate_account	USER_NAMEtyper*   samdb_s      r,   user_account_credsz2KerberosASCanonicalizationTests.user_account_creds   sD    ?"NN$$E'+':':5)'L'L$DJJ!1r/   c                 :   | j         |                                 }|                     |t          | j        j                  \  t          |           _         }| j                             t                     | j         	                    t                     | j         S )N)account_type)rm   r|   r}   MACHINE_NAMEAccountTypeCOMPUTERr   set_secure_channel_typer
   set_kerberos_stater   r   s      r,   machine_account_credsz5KerberosASCanonicalizationTests.machine_account_creds   s    %NN$$E*.*=*=!-6 +> +8 +8'DJJ$a 66~FFF112CDDD!!r/   c                 x    t                                                       t          | _        t          | _        d S r&   )rk   setUpglobal_asn1_printdo_asn1_printglobal_hexdump
do_hexdump)r*   ro   s    r,   r   z%KerberosASCanonicalizationTests.setUp   s'    .(r/   c                    |t           j        k    r|                                 }n4|t           j        k    r|                                 }nt          d          t          ||          }	 |                     |          \  }}nf# t          j	        j
        $ rO}dd l}|                     d                    |j        |                                |                     Y d }~nd }~ww xY w|~d|d         v r$|d         d         }	|                     |	|           |d         }
|                     |
|           |d                             d          }|                     ||           |d	         }|                     ||           |d
                             d          }|                     ||           t,          j                            |j                  r|}n|                                 }|                     |          }|d         d         }|                     |d|j                   |                     |d|j                   |                    t>          |d                   }|                      |tC          j"                              }| #                    |d                   }tI          tJ          j&        |          }|j'        D ]}|j(        tJ          j)        k    rht,          j*                            |j                  r|j+        ,                                }n|j-        }| .                    ||j/        j0                    d S |                     d           d S d S )NzUnexpected credential typer   z#ASN1 Error, Options {0:08b}:{1} {2}kvnoenc-partrO   crealmasciirP   srealmticketetypecipherasn1Speczauthorization-datazPAC_TYPE_LOGON_NAME not found)1r>   r@   r   rA   r   	ExceptionrC   as_reqpyasn1errorPyAsn1Error	tracebackfailr_   rH   
format_exc
check_kvnocheck_cnamedecodecheck_crealmcheck_snamecheck_srealmr   r:   r-   get_krbtgt_credsTicketDecryptionKey_from_credsassertElementEqualr   r   decryptr   
der_decode	krb5_asn1EncTicketPartget_pacr   r	   PAC_DATAbuffersr   PAC_TYPE_LOGON_NAMEr3   rI   r]   rK   assertEqualinfoaccount_name)r*   r+   rr   rR   datard   as_reper   r   rO   r   rP   r   ticket_creds
ticket_keyticket_encpartticket_decpartticket_privatepac_datapac
pac_bufferexpecteds                          r,   _test_with_argsz/KerberosASCanonicalizationTests._test_with_args   s   %%%++--EE?***..00EE89995!!	 KK--MS&&|' 	 	 	II;BB$$&&         	 ? Z((:v.d+++LEUD)))]))'22Ffd+++7OEUD)))H%,,W55Ffd+++$++DL99 7$#4466<<\JJJ ]:6N##NG$.$46 6 6##NF$.O5 5 5'//	0>x0HJ JN!__"022 - 4 4N ||N3G$HIIHW-x88C!k 
; 
;
?g&AAA"/66t|DD 2#'?#?#?#A#A#'>$$Xz/KLLLEE B 		9:::::c ?s   +B C'AC""C'c                 2	   |j         }|j        }|j        }|j        }|                     d          }d}|j        r!t          t          j        d                    }d }t          t          t          f}	|                     |||||d |d d|	d d           }
|                     |
          }|                     |           |                     |d         dd	                    t          |                               |                     |d
         t"          d	                    t          |                               |                     |d         t$          d                    |d         t          |                               |                     |d         t          j                              }|D ]}|d         dk    r
|d         } n|                     |t          j                              }|                     ||d                   }|                                 \  }}|                     ||          }|                     |t          j                              }|                     |t8          |          }|                     |t          j                              }|                     t>          |          }d}|j        r!t          t          j        d                    }|g}|                     |||||d |d d|	d d           }
|                     |
          }|                     |           |                     |d         dd	                    t          |                               |d
         }|                      |t"          d                    |!                    dd          t          |                               |                     |tD          d	                    t          |                               |#                    tH          |d         d                   }|d         dk    r)|                     |t          j%                              }n(|                     |t          j&                              }||fS )Ni  )offset0rQ   i)padatakdc_optionsrO   rM   rP   	from_time	till_time
renew_timenonceetypes	addressesadditional_ticketspvno   zData {0}zmsg-typez
error-codezError code {0}, Data {1}ze-datar   zpadata-type   zpadata-valuer    r   r   z   )'rI   rM   rO   rP   get_KerberosTimerQ   rc   r   
KDCOptionsr   r   r   AS_REQ_createsend_recv_transactionassertIsNotNoner   r_   r   r   r   METHOD_DATAETYPE_INFO2PasswordKey_from_etype_info2get_KerberosTimeWithUsecPA_ENC_TS_ENC_create
der_encodePA_ENC_TS_ENCEncryptedData_creater   EncryptedDataPA_DATA_creater   assertNotEqualgetr   r   r   EncTGSRepPartEncASRepPart)r*   r   rI   rM   rO   rP   tillr   r   r   reqrd   
rep_padatapaetype_info2keypatimepausecpa_tsmsg_typeencr   s                         r,   r   z&KerberosASCanonicalizationTests.as_req  s   _



$$E$22 	Di2>BBCCK $#
   -8',',',+/+/,0'1(.+/48 ! : : ((--S!!! 	KJ--c$ii88	: 	: 	: 	
OY
(9(9#d))(D(D	F 	F 	F 	$&--c,.?TKK	M 	M 	M
 __MI$9$;$; % = =
  	 	B- B&& 0 ' oo)"7"9"9 & ; ; //
KNKK88::))&&99	0G0I0IJJ))#/BEJJ	0G0I0IJJ##$8%@@ 	Di2>BBCCK  -8',',',+/+/,0'1(.+/48 ! : : ((--S!!! 	KJ--c$ii88	: 	: 	: z? 	&--b))D		 	 	 	 	:z/@/@T/K/KLLL kk,c*oh.GHHq6T>> __S93J3L3L_MMFF__S93I3K3K_LLFV}r/   c                 ^   t           j                            |j                  rt          }n3t           j                            |j                  rt          }nt          }|d         }|                     ||d                    |j                             |d         }|d         	                    d          }|j
        }t           j                            |j                  r|j                                        }|                     ||d                    |j                             d S )N	name-typez cname name-type, Options {0:08b}name-stringr   r   z cname principal, Options {0:08b})r   r3   r-   rH   r   r4   r   r   r_   r   rK   rI   r]   )r*   rO   r   expected_name_typerE   nsr`   r   s           r,   r   z+KerberosASCanonicalizationTests.check_cname  s$   #**4<88 	.!-#**4<88 	.!8!-+&	.55dlCC	E 	E 	E
 =!!u||G$$>#**4<88 	63355H.55dlCC	E 	E 	E 	E 	Er/   c                     |j                                         }|                     ||d                    |j                             d S )Nzcrealm, Options {0:08b}rI   rV   r   r_   rH   )r*   r   r   rM   s       r,   r   z,KerberosASCanonicalizationTests.check_crealm  T    ))++64;;DLII	K 	K 	K 	K 	Kr/   c                    |d         }|d         }|d                              d          }t          j                            |j                  rt
          }t          j                            |j                  s+t          j                            |j                  rt          }| 	                    ||d
                    |j                             |j        }t          j                            |j                  r|j                                        }| 	                    ||d
                    |j                             d S | 	                    t          |d
                    |j                             | 	                    d|d
                    |j                             |d                              d          }|j        }t          j                            |j                  r+|j                                                                        }| 	                    ||d	
                    |j                             d S )
Nr   r   r   r   z sname name-type, Options {0:08b}z sname principal, Options {0:08b}rG   r   zsname realm, Options {0:08b})r   r   r:   r-   rH   r   r3   r4   r   r   r_   rK   rI   r]   r   rM   rV   rX   )	r*   rP   r   ntr   r`   r   r   rM   s	            r,   r   z+KerberosASCanonicalizationTests.check_sname  s:   ;=!!u||G$$ ''55 #	E!-+224<@@ =)00>>= &=""299$,GGI I I ~H'..t|<< :?7799299$,GGI I I I I
 299$,GGI I I 299$,GGI I I
 qELL))EzH'..t|<< ??4466<<>>.55dlCCE E E E Er/   c                     |j                                         }|                     ||d                    |j                             d S )Nzsrealm, Options {0:08b}r   )r*   r   r   rM   s       r,   r   z,KerberosASCanonicalizationTests.check_srealm  r   r/   c                 d    |                      d|d                    |j                             d S )Nr   zkvno, Options {0:08b})r   r_   rH   )r*   r   r   s      r,   r   z*KerberosASCanonicalizationTests.check_kvno  sA    t,33DLAA	C 	C 	C 	C 	Cr/   )r0   r1   r2   classmethodrl   rz   r   r   r   r   r   r   r   r   r   r   __classcell__)ro   s   @r,   ri   ri      s        ! ! ! ! [!
 ? ? [?4  
" 
" 
") ) ) ) )
D; D; D;Lu u unE E E2K K K
(E (E (ETK K K
C C C C C C Cr/   ri   __main__)3sysospathinsertenvironenumr   r   r   samba.tests.krb5.kdc_base_testr   samba.tests.krb5.rfc4120_pyasn1testskrb5rfc4120_pyasn1r   samba.credentialsr   samba.dcerpcr	   samba.dcerpc.miscr
   	samba.ndrr   samba.testsr   "samba.tests.krb5.rfc4120_constantsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r>   rC   r   r~   ri   r0   unittestmainr<   r/   r,   <module>r     s  ( 


 				 <      !$
           6 6 6 6 6 6 3 3 3 3 3 3 3 3 3 3 3 3 / / / / / /             , , , , , ,             ' ' ' ' ' '                                     $        d   2 2 2 2 2 2 2 2j 	 GC GC GC GC GCk GC GC GCT
 zNOOOHMOOOOO r/   