
    by                         d Z ddlmZmZmZ ddlmZ ddlmZ ddlm	Z	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 dd
lmZ ddlmZ ddlZd Zd Zd Z G d de          ZdS )zTests for samba.dcerpc.sam.    )samrsecuritylsa)DomainGeneralInformation)RpcInterfaceTestCase)env_loadparmdelete_force)Credentials)system_session)SamDB)ATYPE_NORMAL_ACCOUNTATYPE_WORKSTATION_TRUSTGTYPE_SECURITY_UNIVERSAL_GROUPGTYPE_SECURITY_GLOBAL_GROUP)generate_random_password)
ndr_unpackNc                 4    d |j         d |         D             S )Nc                 *    g | ]}|j         |j        fS  )idxname).0entrys     8/usr/lib/python3/dist-packages/samba/tests/dcerpc/sam.py
<listcomp>ztoArray.<locals>.<listcomp>*   s!    MMMUY
#MMM    )entries)handlearraynum_entriess      r   toArrayr!   )   s!    MM||1LMMMMr   c                     t          t          j        | d         d                   }|                                \  }}|S N	objectSIDr   r   r   dom_sidsplit)msgsid_rids       r   r+   r+   0   s4    
X%s;'7':
;
;Cyy{{HQJr   c                     | dz
  dz  S )N   6   r   )r    s    r   calc_max_sizer/   ;   s    !Or!!r   c                        e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )	SamrTestsc                     t          t          |                                            t          j        d|                                           | _        |                                  |                                  d S )Nzncalrpc:)superr1   setUpr   get_loadparmconn
open_samdbopen_domain_handle)self	__class__s    r   r4   zSamrTests.setUpA   sf    i$$&&&Ij$*;*;*=*=>>	!!!!!r   c                 0   t                      | _        t          j        d         | _        t                      | _        | j                            | j                   t                      | _	        t          | j	        | j        | j                  | _        d S )NDOMAIN)session_infocredentialslp)r   r?   osenvirondomainr
   credsguessr   sessionr   samdbr9   s    r   r7   zSamrTests.open_samdbJ   su    ..j* ]]

!!!%''4:$'K K K


r   c                 <   | j                             d t          j                  | _        | j                             | j        t          j        | j                            | _	        | j         
                    | j        t          j        | j	                  | _        d S N)r6   Connect2r   SEC_FLAG_MAXIMUM_ALLOWEDr   LookupDomainr   StringrB   
domain_sid
OpenDomaindomain_handlerG   s    r   r8   zSamrTests.open_domain_handleU   s    i(((35 5 )00KDK002 2 "Y11K:DOM Mr   c                     d t          j        | j                                                  fd|D             S )Nc                     t          t          j        | d         d                   }|                                \  }}|S r#   r%   )r(   r)   xr*   s       r   r)   z$SamrTests.filter_domain.<locals>.sidc   s4    X-s;/?/BCCCYY[[FQHr   c                 2    g | ]} |          k    |S r   r   )r   rS   r&   r)   s     r   r   z+SamrTests.filter_domain.<locals>.<listcomp>i   s+    ;;;aQ7):):):):):r   )r   r&   rF   get_domain_sid)r9   
unfilteredr&   r)   s     @@r   filter_domainzSamrTests.filter_domainb   sP    	 	 	
 "4:#<#<#>#>??;;;;;:;;;;r   c                 j    | j                             d ddt          j                              \  }}}d S )Nr   r-   )r6   Connect5r   ConnectInfo1)r9   levelinfor   s       r   test_connect5zSamrTests.test_connect5k   s3    ItQ4+<+>+>?? 	fffr   c                 ~    | j                             d t          j                  }|                     |d u           d S rI   )r6   rJ   r   rK   
assertTruer9   r   s     r   test_connect2zSamrTests.test_connect2o   s9    ##D(*KLLd*+++++r   c                     | j                             d t          j                  }t	          | j                             |dd            | j                             |           d S )Nr       )r6   rJ   r   rK   r!   EnumDomainsCloser`   s     r   test_EnumDomainszSamrTests.test_EnumDomainss   sU    ##D(*KLL&&vq*==>>	r   c                     g }|D ]j}d|z  }d|d| j                                         }t          | j         |           | j                             |           |                    |           k|S )Nz
SAMR_GRP%dcn=z
,cn=Users,)rF   	domain_dnr	   newgroupappendr9   idsdnsir   dns         r   create_groupszSamrTests.create_groups}   s     	 	A!#DD(,dj.B.B.D.D.DEBR(((J%%%JJrNNNN
r   c           
         g }|D ]y}d|z  }d|d| j                                         }t          | j         |           | j                             |d dd|z   d|z  d|z             |                    |           z|S )	NzSAMR_USER%drh   z
,CN=USERS,FzDescription for zgiven%dnamez	surname%d)passwordsetpassworddescription	givennamesurname)rF   ri   r	   newuserrk   rl   s         r   create_userszSamrTests.create_users   s     	 	A 1$DD(,dj.B.B.D.D.DEBR((( J!.5'!+#a  ) ) ) JJrNNNN
r   c                     g }|D ]o}d|z  }d|d| j                                         }t          | j         |           | j                             |d|z              |                    |           p|S )Nz
SAMR_CMP%drh   z,cn=COMPUTERS,zDescription of )ru   )rF   ri   r	   newcomputerrk   rl   s         r   create_computerszSamrTests.create_computers   s     	 	A!#DD,0DD$*2F2F2H2H2HIBR(((J""45F5M"NNNJJrNNNN
r   c                 :    |D ]}t          | j        |           d S rI   )r	   rF   )r9   rn   rp   s      r   
delete_dnszSamrTests.delete_dns   s0     	) 	)BR((((	) 	)r   c                 6   | j                             ||          }|                     t          |          dk               | j                            | j        |ddd          \  }}}	|                     t          |          |           |                     t          |          |            |||	j                   | j                            | j        |d|d          \  }
}}|                     ||
           |                     ||            |||j                   |                     |dk               | j                            | j        ||dz
  dd          \  }}}|                     ||           |                     d|            |t          |          dd          |j                   |                     |dk               | j                            | j        |ddd          \  }}}|                     ||           |                     d|            |t          |          d d         |j                   |                     |dk               | j                            | j        |ddd          \  }}}|                     ||           |                     d|            |t          |          dd         |j                    |g d	          }| j                            | j        |ddd          \  }}}|                     ||           |                     t          |          dz
  |            |t          |          dd          |j                   | j                             ||          }| j                            | j        |ddd          \  }}}|                     t          |          t          |          z   |           |                     t          |          t          |          z   |            |||j                   | 
                    |           | j                            | j        |ddd          \  }}}|                     t          |          t          |          z   |           |t          |          k    r |||j                   ne|t          |          dz
  k    r' |t          |          dd          |j                   n(|                     d
                    |                     | j                            | j        ||dd          \  }}}|                     ||           |                     d|           | j                            | j                   d S )N
expressionattrsr   i   rc         r-   i  i  i  i  zIncorrect number of entries {0})rF   searchr_   lenr6   QueryDisplayInforP   assertEqualr   listr~   failformatre   r   )r9   r[   check_resultsselect
attributesadd_elementsexpectedtsrsactualts1rs1actual1ts2rs2actual2rn   ts3rs3actual3newts4rs4actual4ts5rs5actual5ts6rs6actual6s                                 r   _test_QueryDisplayInfoz SamrTests._test_QueryDisplayInfo   s    :$$j$IIH)***
  955q$
< <R 	X+++X+++h///
 #i88q"j: :c7S!!!S!!!h000
 	Q"i88QJ@ @c7S!!!C   d8nnRSS)7?;;;
 	Q"i88q!Z9 9c7S!!!C   d8nnRaR('/::: 	Q"i88q!Z9 9c7S!!!C   d8nnQqS)7?;;; l33344 #i88q$
< <c7S!!!X*C000d8nnQRR('/::: j6DD"i88q$
< <c7XS13777XS13777c7?+++
 	"i88q$
< <c7XS13777 #h--M(GO4444S]]Q&''M$x..,go>>>>II7>>sCCDDD #i88sAz; ;c7c"""C   	$$$$$r   c                       fd}                      g d          }d                    t                    }g d}                     d||| j                                         |           d S )Nc                    t          | |          D ]4\  }}                    t          |t          j                                                 t          |d                   t          |j                             |j        j	        dk    r
                    d|v            n;                    t          |d                   t          |j                             |j        j	        dk    r
                    d|v                                t          |d                   t          |j                             6d S )NsAMAccountNamer   displayNameru   )zipr_   
isinstancer   DispEntryGeneralr   straccount_name	full_namelengthassertFalseru   r   r   ear9   s       r   r   z>SamrTests.test_QueryDisplayInfo_level_1.<locals>.check_results4  s@    h// : :A
1d.C D DEEE  Q'7%8!9!9"%an"5"57 7 7 ;%**$$]a%78888$$S=)9%:%:C<L<LMMM='1,,$$]a%78888$$S=)9%:%:&)!-&8&8: : : :%: :r   r-   r   r      )(&(objectclass=user)(sAMAccountType={0}))r   r   ru   r-   ry   r   r   r   r~   r9   r   rn   r   r   s   `    r   test_QueryDisplayInfo_level_1z'SamrTests.test_QueryDisplayInfo_level_13  s    	: 	: 	: 	: 	:2 --<CC " "EEE
##}fj$2C	E 	E 	E 	r   c                       fd}                      g d          }d                    t                    }ddg}                     d||| j                                         |           d S )Nc                    t          | |          D ]\  }}                    t          |t          j                                                 t          |d                   t          |j                             |j        j	        dk    r
                    d|v                                t          |d                   t          |j                             d S Nr   r   ru   )r   r_   r   r   DispEntryFullr   r   r   ru   r   r   r   s       r   r   z>SamrTests.test_QueryDisplayInfo_level_2.<locals>.check_results\  s     h// : :A
1d.@ A ABBB  Q'7%8!9!9"%an"5"57 7 7 ='1,,$$]a%78888$$S=)9%:%:&)!-&8&8: : : :: :r   r   r   r   ru   r   )r|   r   r   r   r~   r   s   `    r   test_QueryDisplayInfo_level_2z'SamrTests.test_QueryDisplayInfo_level_2[  s    	: 	: 	: 	: 	:* ##LLL11<CC#% %&6
##}fj$2G	I 	I 	I 	r   c                       fd}                      g d          }dt          t          fz  }ddg}                     d||| j                                         |           d S )Nc                    t          | |          D ]\  }}                    t          |t          j                                                 t          |d                   t          |j                             |j        j	        dk    r
                    d|v                                t          |d                   t          |j                             d S r   )r   r_   r   r   DispEntryFullGroupr   r   r   ru   r   r   r   s       r   r   z>SamrTests.test_QueryDisplayInfo_level_3.<locals>.check_results  s     h// : :A
1d.E F FGGG  Q'7%8!9!9"%an"5"57 7 7 ='1,,$$]a%78888$$S=)9%:%:&)!-&8&8: : : :: :r   r   5(&(|(groupType=%d)(groupType=%d))(objectClass=group))r   ru   r   rq   r   r   r   r~   r   s   `    r   test_QueryDisplayInfo_level_3z'SamrTests.test_QueryDisplayInfo_level_3  s    	: 	: 	: 	: 	:*   ..H*'L) ) '6
##}fj$2D	F 	F 	F 	r   c                       fd}                      g d          }d                    t                    }g d}                     d||| j                                         |           d S )Nc                 r   t          | |          D ]\  }}                    t          |t          j                                                 t          |j        t          j                                                 t          |d                   t          |j        j
                             d S Nr   r   r_   r   r   DispEntryAsciir   r   AsciiStringLarger   r   stringr   s       r   r   z>SamrTests.test_QueryDisplayInfo_level_4.<locals>.check_results       h// J JA
1d.A B BCCCq~s/CDDF F F  *+,,c!.2G.H.HJ J J J	J Jr   r   r   r   r   r   r   s   `    r   test_QueryDisplayInfo_level_4z'SamrTests.test_QueryDisplayInfo_level_4  s    	J 	J 	J 	J 	J --<CC " "EEE
##}fj$2C	E 	E 	E 	r   c                       fd}                      g d          }dt          t          fz  }ddg}                     d||| j                                         |           d S )Nc                 r   t          | |          D ]\  }}                    t          |t          j                                                 t          |j        t          j                                                 t          |d                   t          |j        j
                             d S r   r   r   s       r   r   z>SamrTests.test_QueryDisplayInfo_level_5.<locals>.check_results  r   r   r   r   r   ru      r   r   s   `    r   test_QueryDisplayInfo_level_5z'SamrTests.test_QueryDisplayInfo_level_5  s    	J 	J 	J 	J 	J   ..H*'L) ) '6
##}fj$2D	F 	F 	F 	r   c                 2     fd}                      g d          }dt          t          fz  }ddg} j                            ||          }                     |          }                     t          |          dk               t          t          |          t                    }t          t          |          d	z             } j                             j        d
|          \  }	}
}                     t          |          |            |||
j                   t          d          } j                             j        d
|          \  }	}
}                     d|            ||d d         |
j                   t          d          }t          |          } j                             j                    j                             j        ||          \  }	}}                     d
|                                d
|	           t          d          }g }
 j                             j        d
|          \  }	}}|	r]                     d|           |
                    |j        d
                     j                             j        |	|          \  }	}}|	]|r |
                    |j        d
                    g }
t          d          } j                             j        d
|          \  }	}}                      g d          }|	r]                     d|           |
                    |j        d
                     j                             j        |	|          \  }	}}|	]|r |
                    |j        d
                                         t          |          t          |
                      |||
           t          t          |          t          |          z   d	z             } j                             j        d
|          \  }	}
}                     t          |          t          |          z   |            j                            ||          }                     |          }                     t          |          t          |          k               t          t          |          t                    } |||
j                   g }
t          d          } j                             j        d
|          \  }	}}                     |           |	ra|r_                     d|           |
                    |j        d
                     j                             j        |	|          \  }	}}|	r|_|r |
                    |j        d
                                         t          |          t          |
                      |||
                                |           d S )Nc                    t          | |          D ]r\  }}                    t          |t          j                                                 t          |d                   t          |j        j                             sd S r   	r   r_   r   r   SamEntryr   r   r   r   r   s       r   r   z6SamrTests.test_EnumDomainGroups.<locals>.check_results      h// B BA
1dm < <===  *+,,c!&-.@.@B B B BB Br   r   r   r   r$   r   r   key
   r   r-   r   )rq   r   r   rF   r   rW   r_   r   sortedr   r+   r/   r6   EnumDomainGroupsrP   r   r   re   r   rk   r~   r9   r   rn   r   r   rV   filteredr   max_sizeresume_handler   r    rhr   	extra_dnsunfiltered01
filtered01
expected01s   `                 r   test_EnumDomainGroupszSamrTests.test_EnumDomainGroups  s(   	B 	B 	B 	B 	B   .. I*'L) ) '4
Z&&&
&KK
%%j11H)*** $x..c222 !X!344/3y/I/I80- 0-,X444h/// !##/3y/I/I80- 0-,K(((hrrlFN333
 !##]]	$$$*.)*D*DH+. +.'; 	K(((M***
 !##*.)*D*D8+- +-'; 	=Q,,,MM!)A,'''.2i.H.H"M8/= /=+]A{  	=
  	(MM!)A,'''  ##*.)*D*D8+- +-';&&'?'?'?@@	 	=Q,,,MM!)A,'''.2i.H.H"M8/= /=+]A{  	=
  	(MM!)A,'''XF444h'''
 !XY!?"!DEE/3y/I/I80- 0-,XY7EEE z((F*(MM''55
J#h--7888 D,,#666

 	j&.111  ##*.)*D*D8+- +-';	""" 	= 	=Q,,,MM!)A,'''.2i.H.H"M8/= /=+]A{  	= 	=
  	(MM!)A,'''XF444h'''r   c                 
     fd}                      g d          }d}g d} j                            ||          }                     |          }                     t          |          dk               t          t          |          t                    }t          t          |          dz             } j
                             j        d	d	|          \  }	}
}                     t          |          |            |||
j                   t          d          } j
                             j        d	d	|          \  }	}
}                     d|            ||d d         |
j                   t          |          }t          d
          } j
                             j                    j
                             j        |d	|          \  }	}}                     d	|                                d	|	           g }
t          d
          } j
                             j        d	d	|          \  }	}}|	r^                     d
|           |
                    |j        d	                     j
                             j        |	d	|          \  }	}}|	^|r |
                    |j        d	                                         t          |          t          |
                      |||
           g }
t          d
          } j
                             j        d	d	|          \  }	}}                      g d          }|	r^                     d
|           |
                    |j        d	                     j
                             j        |	d	|          \  }	}}|	^|r |
                    |j        d	                                         t          |          t          |
                      |||
           t          t          |          t          |          z   dz             } j
                             j        d	d	|          \  }	}
}                     t          |          t          |          z   |            j                            ||          }                     |          }                     t          |          t          |          k               t          t          |          t                    }                     t          |          |            |||
j                                        ||z              d S )Nc                    t          | |          D ]r\  }}                    t          |t          j                                                 t          |d                   t          |j        j                             sd S r   r   r   s       r   r   z5SamrTests.test_EnumDomainUsers.<locals>.check_resultsb  r   r   r   z(objectClass=user))r   r$   userAccountConrolr   r   r   r   r   r-   r   )ry   rF   r   rW   r_   r   r   r   r+   r/   r6   EnumDomainUsersrP   r   r   re   r   rk   r~   r   s   `                 r   test_EnumDomainUserszSamrTests.test_EnumDomainUsersa  sg   	B 	B 	B 	B 	B -- &III
Z&&&
&KK
%%j11H)*** $x..c222 !X!344/3y/H/H1h00 00,X444h///
 !##/3y/H/H1h00 00,K(((hrrlFN333
 ]] ##	$$$*.)*C*CAx+1 +1'; 	K(((M***  ##*.)*C*C1h+0 +0'; 	@Q,,,MM!)A,'''.2i.G.G"M1h/@ /@+]A{  	@
  	(MM!)A,'''XF444h'''  ##*.)*C*C1h+0 +0';%%&>&>&>??	 	@Q,,,MM!)A,'''.2i.G.G"M1h/@ /@+]A{  	@
  	(MM!)A,'''XF444h''' !XY!?"!DEE/3y/H/H1h00 00,XY7EEE z((F*(MM''55
J#h--7888 D,,#666

 	Z+666j&.111i(((((r   c                 ~   | j                             | j        t                    }t	          d          }| j                             | j        dd|          \  }}}|}|rC|                     d|           | j                             | j        |d|          \  }}}||z  }|C|                     ||j                   d S Nr-   r   )r6   QueryDomainInforP   r   r/   r   r   	num_usersr9   r\   r   r   r   r    counts          r   $test_DomGeneralInformation_num_usersz.SamrTests.test_DomGeneralInformation_num_users  s    y(( 8: :
 !##*.)*C*C1h+0 +0'; 	!Q,,,.2i.G.G"M1h/@ /@+]A{[ E	  	! 	/////r   c                 z   | j                             | j        t                    }t	          d          }| j                             | j        d|          \  }}}|}|rB|                     d|           | j                             | j        ||          \  }}}||z  }|B|                     ||j                   d S r   )r6   r   rP   r   r/   r   r   
num_groupsr   s          r   %test_DomGeneralInformation_num_groupsz/SamrTests.test_DomGeneralInformation_num_groups  s    y(( 8: :
 !##*.)*D*D8+- +-'; 	!Q,,,.2i.H.H"M8/= /=+]A{[ E	  	! 	00000r   c                 z   | j                             | j        t                    }t	          d          }| j                             | j        d|          \  }}}|}|rB|                     d|           | j                             | j        ||          \  }}}||z  }|B|                     ||j                   d S r   )r6   r   rP   r   r/   EnumDomainAliasesr   num_aliasesr   s          r   &test_DomGeneralInformation_num_aliasesz0SamrTests.test_DomGeneralInformation_num_aliases  s    y(( 8: :
 !##*.)*E*E8+- +-'; 	!Q,,,.2i.I.I"M8/= /=+]A{[ E	  	! 	 011111r   )__name__
__module____qualname__r4   r7   r8   rW   r]   ra   rf   rq   ry   r|   r~   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r:   s   @r   r1   r1   ?   s       " " " " "K K KM M M< < <@ @ @, , ,     	 	 	   .	 	 	) ) )t% t% t%t" " "P  H  J  6  0H H HTx) x) x)t0 0 0$1 1 1$2 2 2 2 2 2 2r   r1   )__doc__samba.dcerpcr   r   r   samba.dcerpc.samrr   samba.testsr   r   r	   samba.credentialsr
   
samba.authr   samba.samdbr   
samba.dsdbr   r   r   r   sambar   	samba.ndrr   r@   r!   r+   r/   r1   r   r   r   <module>r     sw  ( " ! , , , , , , , , , , 6 6 6 6 6 6 , , , , , , 2 2 2 2 2 2 2 2 ) ) ) ) ) ) % % % % % %      ! ! ! ! ! ! ! ! ! ! ! !
 + * * * * *             				N N N  " " "P2 P2 P2 P2 P2$ P2 P2 P2 P2 P2r   