
    b?                     f    d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	m
Z
  G d de          ZdS )    N)SambaToolCmdTest)dsdb)
ndr_unpackndr_pack)dnspc                        e Zd ZdZg ZdZ fdZ fdZd Zd Z	d Z
d Zd	 Zd
 Zd Zi fdZi fdZd Zd Zd Zd Zd Z xZS )ComputerCmdTestCasez)Tests for samba-tool computer subcommandsNc                 *    t          t                                                      dt          j        d         dt          j        d          _                             ddt          j        d         z   j                   _        d _        d	 _	         
                                                                }|d
z    j        gd|dz    j	        gd|z   dz   gd|dz    j         j	        gd|z   dz   d|z   dz   gdd|dz   ig} fd|D              _         j        D ]l}                     |          \  }}}                     |||                                d|d                                d|d         z  |                                |d                   }                     |           |d                             d          }|d         }	|d                             d          sd|d         z  }	                     d|                    d          z  |                                d|                    d          z  |	                                d|                    d          z  |d                    nd S )Nz-UDC_USERNAMEz%DC_PASSWORDz-Hz	ldap://%s	DC_SERVERz10.10.10.10z'2001:0db8:0a0b:12f0:0000:0000:0000:0001cmp1)nameip_address_listcmp2zhost/SPN20)r   r   service_principal_name_listzcmp3$SPN30SPN31r   zcmp4$c                 <    g | ]}                     |           S ))base)_randomComputer).0itemselfs     A/usr/lib/python3/dist-packages/samba/tests/samba_tool/computer.py
<listcomp>z-ComputerCmdTestCase.setUp.<locals>.<listcomp>C   s*    KKKd$..D.99KKK    ERROR$There shouldn't be any error message Computer '%s' added successfully$%s$%ssAMAccountNamedescription)superr	   setUposenvironcredsgetSamDBsamdbipv4ipv6
randomNamelower	computers_create_computerassertCmdSuccessassertNotInassertIn_find_computerassertIsNotNonerstripendswithassertEqualget)r   computer_basenamedatacomputerresultouterrfoundexpectednameexpectedsamaccountname	__class__s   `         r   r(   zComputerCmdTestCase.setUp#   s   !4((..0000#%:m#<#<#<bj>W>WX
]]4rz+7N)NPTPZ[[
!	=	 OO--3355 *F2$(I; 
 *F2$(I;//'90  *G3$(Ity#9//'9//'90  )G3)
0 LKKKdKKK  	7 	7H!%!6!6x!@!@VS#!!&#s333DF F FMM<"6*+,/1 1 1 ''(899E  '''#F+22377L%-f%5"F#,,S11 B).&1A)A&TEIIf$5$55|DDDTEII.>$?$??46 6 6TEIIm$<$<<&}57 7 7 7)	7 	7r   c           	      *   t          t          |                                            | j        D ]b}|                     |d                   rE|                     ddd|d         z            \  }}}|                     |||d|d         z             cd S )Nr   r?   deleter$   Failed to delete computer '%s')r'   r	   tearDownr2   r7   	runsubcmdr4   )r   r?   r@   rA   rB   rF   s        r   rJ   zComputerCmdTestCase.tearDown]   s    !4((11333 	8 	8H""8F#344 8%)^^J488F;K4K&M &M"c%%fc3&F&.v&6'78 8 8		8 	8r   c                     | j         D ]I}|                    dg           }|                     |d         |          }|                     |           Jd S )Nr   r   )r2   r<   _find_service_principal_name
assertTrue)r   r?   expected_namesrC   s       r   ,test_newcomputer_with_service_principal_namez@ComputerCmdTestCase.test_newcomputer_with_service_principal_nameh   s`     	# 	#H%\\*GLLN55hv6FWWEOOE""""	# 	#r   c           	      h   | j         D ]L}|                    dg           D ]3}|                     |d         |          }|                     |           4M| j         D ]}|                     ddd|d         z            \  }}}|                     |||d|d         z             |                     |d                   }|                     |d|d         z             | j         D ]L}|                    dg           D ]3}|                     |d         |          }|                     |           4Md S )Nr   r   r?   rH   r$   rI   "Deleted computer '%s' still exists)	r2   r<   _find_dns_recordrN   rK   r4   r7   assertIsNoneassertFalse)r   r?   
ip_addressrC   r@   rA   rB   s          r   !test_newcomputer_with_dns_recordsz5ComputerCmdTestCase.test_newcomputer_with_dns_recordso   s     	' 	'H&ll+<bAA ' '
--hv.>
KK&&&&'
  		0 		0H!%
H04x7G0G"I "IVS#!!&#s"B"*6"2#34 4 4 ''(899EeB&v./0 0 0 0
  	( 	(H&ll+<bAA ( (
--hv.>
KK  ''''(	( 	(r   c           	         | j         D ]G}|                     |          \  }}}|                     |d           |                     d|           H| j         D ]}|                     ddd|d         z            \  }}}|                     |||d|d         z             |                     |d                   }|                     |d|d         z             | j         D ]l}|                     dd	d|d         z  d
|d         z            \  }}}|                     |||           |                     |dd           |                     d|d         z  |           |                     |d                   }|d         	                    d          }|d         }|d         
                    d          sd|d         z  }|                     d|                    d          z  |           |                     d|                    d          z  |           |                     d|                    d          z  |d                    ndS )z<This tests the "computer add" and "computer delete" commandsz"Succeeded to add existing computerzalready existsr?   rH   r$   r   rI   rR   add--description=%sr&    r    r!   r"   r#   r%   N)r2   r3   assertCmdFailr6   rK   r4   r7   rT   r;   r9   r:   r<   )r   r?   r@   rA   rB   rC   rD   rE   s           r   test_newcomputerz$ComputerCmdTestCase.test_newcomputer   s     	1 	1H!%!6!6x!@!@VS#v'KLLLMM*C0000  		0 		0H!%
Hd080@GA "B "BVS#!!&#s"B"*6"2#34 4 4 ''(899EeB&v./0 0 0 0
  	7 	7H!%E4(6*:#:"Xm%<<"> ">VS# !!&#s333S"&LMMMMM<"6*+,/1 1 1 ''(899E#F+22377L%-f%5"F#,,S11 B).&1A)A&TEIIf$5$55|DDDTEII.>$?$??46 6 6TEIIm$<$<<&}57 7 7 7'	7 	7r   c                    |                      dd          \  }}}|                     |||d           dt          j        z  }| j                            | j                                        t          j        |dg          }| 	                    t          |          dk    d           |D ]@}|                    dd	          }|                     |t          |          d
|z            }Ad S )Nr?   listError running list(sAMAccountType=%u)samaccountnamer   scope
expressionattrsr   no computers found in samdbidxcomputer '%s' not foundrK   r4   r   ATYPE_WORKSTATION_TRUSTr-   search	domain_dnldbSCOPE_SUBTREErN   lenr<   assertMatchstr	r   r@   rA   rB   search_filtercomputerlistcomputerobjr   rC   s	            r   	test_listzComputerCmdTestCase.test_list   s   !^^J??cfc30DEEE.56 z((dj.B.B.D.D/2/@4A0@/A ) C C
 	L))A-/LMMM' 	G 	GK??#3?;;D$$S#d))%>%EG GEE	G 	Gr   c                    |                      ddd          \  }}}|                     |||d           dt          j        z  }| j                            | j                                        t          j        |g           }| 	                    t          |          dk    d           |D ]@}|                    d	d
          }|                     |t          |          d|z            }Ad S )Nr?   r_   z	--full-dnr`   ra   rc   r   rg   dnrh   rj   rk   rt   s	            r   test_list_full_dnz%ComputerCmdTestCase.test_list_full_dn   s   !^^JLLcfc30DEEE.56 z((dj.B.B.D.D/2/@4A/1 ) 3 3
 	L))A-/LMMM' 	G 	GK??4Q?//D$$S#d))%>%EG GEE	G 	Gr   c                    t          | j                                                  }|                     ddd|          \  }}}|                     |||d           dt
          j        z  }| j                            |t          j	        |dg          }| 
                    t          |          dk    d	           |D ]@}|                    dd
          }|                     |t          |          d|z            }	Ad S )Nr?   r_   z-br`   ra   r   rc   r   rg   rh   rj   )rs   r-   rn   rK   r4   r   rl   rm   ro   rp   rN   rq   r<   rr   )
r   base_dnr@   rA   rB   ru   rv   rw   r   rC   s
             r   test_list_base_dnz%ComputerCmdTestCase.test_list_base_dn   s   dj**,,--!^^JgNNcfc30DEEE.56 z((g/2/@4A06x ) 9 9
 	L))A-/LMMM' 	G 	GK??6q?11D$$S#d))%>%EG GEE	G 	Gr   c                 
   |                      ddi          }|                     |          \  }}}|                     |||           | j        D ]}|                     |d                                       d          }|                     ddd|d         z  d|d         z            \  }}}|                     |||d|d         z             |                     |d	d
           |                     d|d         z  |           |                     |d                   }| 	                    |                    d          |d|d         z             |d         
                    d          }t          j        | j        d|d|d         d| j                                                  }	|                     |                    d          |	d|d         z             |                     ddd|d         z  d|                                z            \  }}}|                     |||d|d         z             |                     ddd|d         z            \  }}}|                     |||d|d         z             d S )Nr   parentOUrz   r?   mover$   OU=%szFailed to move computer '%s'r[   r    zMoved computer "%s"z1Moved computer '%s' still exists with the same dnr"   zCN=z,OU=,z"Moved computer '%s' does not existourH   zFailed to delete ou '%s')	_randomOU
_create_our4   r2   r7   r<   rK   r;   r6   assertNotEqualsr9   ro   Dnr-   rn   parent)
r   parentour@   rA   rB   r?   olddnrC   computernamenewexpecteddns
             r   	test_movezComputerCmdTestCase.test_move   s   >>6:"677!__X66cfc3/// 	4 	4H''(899==dCCE!%
F04x7G0G07(6:J0J"L "LVS# !!&#s"@"*6"2#34 4 4 S"&LMMMMM/(62BBCHHH''(899E  4%#,.6v.>#?A A A $F+22377LF4::$0LL(62B2B2B$(J$8$8$:$:$:$<= =M UYYt__mB&v./0 0 0 "&
F04x7G0G04u||~~0E"G "GVS# !!&#s"@"*6"2#34 4 4 4 "^^D(,3hv6F,FH Hcfc388F;KK	M 	M 	M 	M 	Mr   c                     |                                  |                      d          d}|                    |           |S )zWcreate a computer with random attribute values, you can specify base
        attributesd   countr   r&   r0   update)r   r   r?   s      r   r   z#ComputerCmdTestCase._randomComputer  sG    
 OO%%???55
 
 	r   c                     |                                  |                      d          d}|                    |           |S )zRcreate an ou with random attribute values, you can specify base
        attributesr   r   r   r   )r   r   r   s      r   r   zComputerCmdTestCase._randomOU#  sD    
 OO%%???55
 
 			$	r   c                 \   d                     |d         | j        |d                   }|                    dg           D ]}|d                     |          z  }|                    dg           D ]}|d                     |          z  }|                                } | j        dd	g|R  S )
Nz{0} {1} --description={2}r   r&   r   z --ip-address={0}r   z --service-principal-name={0}r?   rY   )formatr+   r<   splitrK   )r   r?   argsrV   service_principal_names        r   r3   z$ComputerCmdTestCase._create_computer.  s    *11Vdj(=*AC C #,,'8"== 	; 	;J'..z:::DD&.ll3PRT&U&U 	S 	S"3::;QRRRDDzz||t~j%7$7777r   c                 V    |                      ddd|d         z  d|d         z            S )Nr   rY   r   r   rZ   r&   )rK   )r   r   s     r   r   zComputerCmdTestCase._create_ou<  s7    ~~dE7RZ+?02m3DDF F 	Fr   c                 8   |}|                     d          sd|z  }dt          j        |          ddd| j                                        d}| j                            | j                                        t          j        |          }|r|d	         S d S )
Nr"   r#   (&(sAMAccountName=)(objectCategory=&CN=Computer,CN=Schema,CN=Configurationr   )))r   rd   re   r   )r:   ro   binary_encoder-   rn   rm   rp   )r   r   rb   ru   rv   s        r   r7   z"ComputerCmdTestCase._find_computer@  s    }}S!! 	*"T\N+N;;;;BBB*..00002 z((dj.B.B.D.D/2/@4A ) C C  	?"4r   c                    |                     d          }| j                            d                    | j                                                  t
          j        d                    |          ddg          }|D ]}}d|v rt          |d                   dk    r |d         D ]T}t          t          j
        |          }t          |j                  }t          |          t          |          k    r  dS U~d	S )
Nr"   zDC=DomainDnsZones,{0}z"(&(objectClass=dnsNode)(name={0}))	dnsRecorddNSTombstonedrc   TRUETF)r9   r-   rm   r   get_default_basednro   rp   rs   r   r   DnssrvRpcRecordr>   )r   r   rV   recordsrecorddns_record_bindns_record_objips           r   rS   z$ComputerCmdTestCase._find_dns_recordP  s
   {{3*##(//
0M0M0O0OPP#;BB4HH0	 $ 2 2  		  		 F&((S1H-I-IV-S-S"("5    !+D,@.!Q!Q,--r77c*oo--444 .	  ur   c                    |                     d          dz   }dt          j        |          ddd| j                                        d}| j                            | j                                        t          j        |dg          }t                      }|D ]=}|                    dg           D ]$}|	                    t          |                     %>|t          |          k    S )	zVFind all servicePrincipalName values and compare with expected_service_principal_namesr"   r   r   r   r   r   servicePrincipalNamerc   )stripro   r   r-   rn   rm   rp   setr<   rY   rs   )r   r    expected_service_principal_namesrb   ru   computer_listnamesr?   s           r   rM   z0ComputerCmdTestCase._find_service_principal_namef  s    C3.+N;;;;BBB*..00002 
))%%''#$)*	 * , ,
 % 	% 	%H %;R@@ % %		#d))$$$$%<====r   )__name__
__module____qualname____doc__r2   r-   r(   rJ   rP   rW   r]   rx   r{   r~   r   r   r   r3   r   r7   rS   rM   __classcell__)rF   s   @r   r	   r	      sY       33IE87 87 87 87 87t	8 	8 	8 	8 	8# # #( ( (4)7 )7 )7VG G G&G G G&G G G((M (M (MT $& 	 	 	 	   	 	 	 	8 8 8F F F     ,> > > > > > >r   r	   )r)   ro   samba.tests.samba_tool.baser   sambar   	samba.ndrr   r   samba.dcerpcr   r	    r   r   <module>r      s   , 
			 



 8 8 8 8 8 8       * * * * * * * *      X> X> X> X> X>* X> X> X> X> X>r   