a
    W×aBo  ć                   @   s   d dl Z d dlZd dlZd dlmZ d dlZd dlmZmZ d dl	m
Z
 e j e j e j e”d””Zddd	ZG d
d deZdS )é    N)ŚSambaToolCmdTest)Ś
get_gpo_dnŚget_gpo_info)ŚLoadParmz../../../../..TFc                 C   sJ  t j | ”rf|rFt|  ” }| ”  t|  ” }| ”  ||krb| S nt|  ” t| ” krb| S dS | g}|g}|rF| ” }	| ” }
t  |	”}t  |
”}| ”  | ”  ||krø|S |D ]}t j 	|	|”}t j 	|
|”}t j 
|”rž| |” | |” q¼| d”r|s| d”r¼|r¼t|d ” t|d ” kr¼|  S q¼qrdS )zĄUse this function to determine if the GPO backup differs from another.

    xml=True checks whether any xml files are equal
    binary=True checks whether any .SAMBABACKUP files are equal
    Nz.xmlz.SAMBABACKUPŚrb)ŚosŚpathŚisfileŚopenŚ	readlinesŚsortŚreadŚpopŚlistdirŚjoinŚisdirŚappendŚendswith)Zpath1Zpath2ŚbinaryŚxmlŚ	sortlinesZfile1Zfile2Zl_dirsZr_dirsZl_dirZr_dirŚdirlistZdirlist_otherŚeZl_nameZr_name© r   ś</usr/lib/python3/dist-packages/samba/tests/samba_tool/gpo.pyŚhas_difference   sH    


’’r   c                       s   e Zd ZdZdZdZdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z fddZ fd d!Z  ZS )"ŚGpoCmdTestCasez%Tests for samba-tool time subcommandsZtestgpoz&{1E1DC8EA-390C-4800-B327-98B56A0AEA5D}c                 C   s4   |   ddddtjd  ”\}}}|  |||d” dS )z?Run gpo list against the server and make sure it looks accurateŚgpoZlistallś-Hś	ldap://%sŚSERVERz%Ensuring gpo listall ran successfullyN©Ś	runsubcmdr   ŚenvironŚassertCmdSuccess©ŚselfŚresultŚoutŚerrr   r   r   Śtest_gpo_listY   s     zGpoCmdTestCase.test_gpo_listc              	   C   s2   |   dddddtjd  ”\}}}|  |d” dS )	zfRun against a non-existent GPO, and make sure it fails (this hard-coded UUID is very unlikely to existr   Śfetchz$c25cac17-a02a-4151-835d-fae17446ee43r   r   r    zcheck for result codeN)r"   r   r#   ZassertCmdFailr%   r   r   r   Śtest_fetchfail^   s    "zGpoCmdTestCase.test_fetchfailc              	   C   sT   |   dd| jddtjd  d| j”\}}}|  |||d” t tj 	| jd”” d	S )
z/Run against a real GPO, and make sure it passesr   r+   r   r   r    ś--tmpdirś!Ensuring gpo fetched successfullyŚpolicyN)
r"   Śgpo_guidr   r#   Śtempdirr$   ŚshutilŚrmtreer   r   r%   r   r   r   Ś
test_fetchc   s    *zGpoCmdTestCase.test_fetchc              	   C   s8   |   dd| jddtjd  ”\}}}|  |||d” dS )ś(Show a real GPO, and make sure it passesr   Śshowr   r   r    r.   N©r"   r0   r   r#   r$   r%   r   r   r   Ś	test_showi   s    $zGpoCmdTestCase.test_showc                 C   sN   |   dd| jddtjd  dtjd tjd f ”\}}}|  |||d	” d
S )r5   r   r6   r   r   r    ś-U%s%%%sŚUSERNAMEŚPASSWORDr.   Nr7   r%   r   r   r   Śtest_show_as_adminn   s    :z!GpoCmdTestCase.test_show_as_adminc              
   C   sJ   |   ddddtjd  dtjd tjd f ”\}}}|  |||d	” d
S )z9Check all the GPOs on the remote server have correct ACLsr   Zaclcheckr   r   r    r9   r:   r;   z!Ensuring gpo checked successfullyNr!   r%   r   r   r   Śtest_aclchecks   s    6zGpoCmdTestCase.test_aclcheckc                 C   s&  |   ddtjd  dtjd tjd f ”| _d| j ”  }| j |dd	” |  d
d|ddtjd  dtjd tjd f ”\}}}|  |||d” t 	” }t 
| j|”|_t dtjd”|d< | j |” |  d
d|ddtjd  dtjd tjd f ”\}}}|  |||d” | j |” d S )Nr   r   Ś	DC_SERVERr9   ŚDC_USERNAMEŚDC_PASSWORDzOU=gpo_test_link,%sZorganizationalUnit)ŚdnZobjectClassr   Zgetlinkr    r:   r;   z&Ensuring gpo link fetched successfullyś ZgPLink)ŚgetSamDBr   r#   ŚsamdbZget_default_basednŚaddr"   r$   ŚldbŚMessageZDnrA   ŚMessageElementŚFLAG_MOD_REPLACEŚmodifyŚdelete)r&   Zcontainer_dnr'   r(   r)   Śmr   r   r   Śtest_getlink_emptyx   s:    
’’ž

’ž


’ž
z!GpoCmdTestCase.test_getlink_emptyc                 C   sŲ  t j | jd| j”}t j | jd”}t  |” t j | jd”}t  |” d}z |  ddd|dd	t jd
  d|d| j	dt jd t jd f d”\}}}d| 
d”d  
d”d  }|  dd|dd	t jd
  d|”\}}}|  |||d” |  tt j |d|”|ddd” W |rZ|  dd|dd	t jd
  dt jd t jd f ”\}}}|  |||d” t |” t |” nd|r¾|  dd|dd	t jd
  dt jd t jd f ”\}}}|  |||d” t |” t |” 0 dS )z<Restore from a static backup and compare the binary contentsr/   ŚtempŚnewNr   ŚrestoreŚBACKUP_RESTORE1r   r   r    r-   ś
--entitiesr9   r:   r;   ś--restore-metadataś{%s}ś{é   ś}r   Śbackupr.   TF©r   r   Śdelś!Ensuring gpo deleted successfully©r   r   r   Śbackup_pathŚbackup_gpo_guidr1   Śmkdirr"   r#   Śentity_fileŚsplitr$   ŚassertIsNoner   r2   r3   )r&   Śstatic_pathŚ	temp_pathŚnew_pathr0   r'   r(   r)   r   r   r   Ś"test_backup_restore_compare_binary   s    ’


’’’ų


’ż
’ż

’’’ż

ö
’’’ż

z1GpoCmdTestCase.test_backup_restore_compare_binaryc           
      C   s0  t j | jd| j”}t j | jd”}t  |” t j | jd”}t  |” d}d}d}z"|  ddd|dd	t jd
  d|d| j	dt jd t jd f d”\}}}	d| 
d”d  
d”d  }|}|  dd|dd	t jd
  d|d”\}}}	|  |||	d” |  dddt j |d|”dd	t jd
  d|dt jd t jd f d”
\}}}	d| 
d”d  
d”d  }|}|  |||	d” |  dd|dd	t jd
  d|”\}}}	|  tt j |d|”t j |d|”ddd” W |r|  dd|dd	t jd
  dt jd t jd f ”\}}}	|  |||	d” |rd|  dd|dd	t jd
  dt jd t jd f ”\}}}	|  |||	d” t |” t |” n²|rČ|  dd|dd	t jd
  dt jd t jd f ”\}}}	|  |||	d” |r|  dd|dd	t jd
  dt jd t jd f ”\}}}	|  |||	d” t |” t |” 0 dS ) zRestore from a static backup (and use no entity file, resulting in
        copy-restore fallback), and compare the binary contentsr/   rN   rO   Nr   rP   rQ   r   r   r    r-   rR   r9   r:   r;   rS   rT   rU   rV   rW   r   rX   ś--generalizer.   ŚBACKUP_RESTORE2ś"Ensuring gpo restored successfullyTFrY   rZ   r[   r\   ©
r&   rc   rd   re   r0   Z	gpo_guid1Z	gpo_guid2r'   r(   r)   r   r   r   Ś.test_backup_restore_no_entities_compare_binaryĢ   sź    ’


’’’ų


’ü

’’’ł
	
’ż
’
’ü

’’’ż

’’’ż

ķ
’’’ż

’’’ż

z=GpoCmdTestCase.test_backup_restore_no_entities_compare_binaryc           
      C   s4  t j | jd| j”}t j | jd”}t  |” t j | jd”}t  |” d}d}d}z&|  ddd|dd	t jd
  d|d| j	dt jd t jd f d”\}}}	d| 
d”d  
d”d  }|}|  dd|dd	t jd
  d|”\}}}	|  |||	d” |  dddt j |d|”dd	t jd
  d|d| j	dt jd t jd f d”\}}}	d| 
d”d  
d”d  }|}|  |||	d” |  dd|dd	t jd
  d|”\}}}	|  tt j |d|”t j |d|”ddd” W |r|  dd|dd	t jd
  dt jd t jd f ”\}}}	|  |||	d” |rh|  dd|dd	t jd
  dt jd t jd f ”\}}}	|  |||	d” t |” t |” n²|rĢ|  dd|dd	t jd
  dt jd t jd f ”\}}}	|  |||	d” |r|  dd|dd	t jd
  dt jd t jd f ”\}}}	|  |||	d” t |” t |” 0 dS )z6Restore from a static backup and backup to compare XMLr/   rN   rO   Nr   rP   rQ   r   r   r    r-   rR   r9   r:   r;   rS   rT   rU   rV   rW   r   rX   r.   rh   ri   TrY   rZ   r[   r\   rj   r   r   r   Ś&test_backup_restore_backup_compare_XML#  sź    ’


’’’ų


’ż

’’’ų


’ż
’
’ü

’’’ż

’’’ż

ķ
’’’ż

’’’ż

z5GpoCmdTestCase.test_backup_restore_backup_compare_XMLc                 C   sP  t j | jd| j”}t j | jd”}t  |” t j | jd”}t  |” t j |d”}t|d}| d” W d   n1 s0    Y  t j |d”}d}zH|  	dd	d
|ddt j
d  d|d|dt j
d t j
d f d”\}}	}
|  ||	|
d” d|	 d”d  d”d  }|  	dd|ddt j
d  d|dd|”
\}}	}
|  ||	|
d” |  t||dd” |  tt j |d|”|ddd ” W |rŅ|  	dd!|ddt j
d  dt j
d t j
d f ”\}}	}
|  ||	|
d"” t |” t |” nd|r6|  	dd!|ddt j
d  dt j
d t j
d f ”\}}	}
|  ||	|
d"” t |” t |” 0 dS )#zfRestore from a static backup with different entities, generalize it
        again, and compare the XMLr/   rN   rO   ŚentitiesŚwbsD  <!ENTITY SAMBA__NETWORK_PATH__82419dafed126a07d6b96c66fc943735__ "\\samdom.example.com">
<!ENTITY SAMBA__NETWORK_PATH__0484cd41ded45a0728333a9c5e5ef619__ "\\samdom">
<!ENTITY SAMBA____SDDL_ACL____4ce8277be3f630300cbcf80a80e21cf4__ "D:PAR(A;CI;KA;;;BA)(A;CIIO;KA;;;CO)(A;CI;KA;;;SY)(A;CI;KR;;;S-1-16-0)">
<!ENTITY SAMBA____USER_ID_____d0970f5a1e19cb803f916c203d5c39c4__ "*S-1-5-113">
<!ENTITY SAMBA____USER_ID_____7b7bc2512ee1fedcd76bdc68926d4f7b__ "Administrator">
<!ENTITY SAMBA____USER_ID_____a3069f5a7a6530293ad8df6abd32af3d__ "Foobaz">
<!ENTITY SAMBA____USER_ID_____fdf60b2473b319c8c341de5f62479a7d__ "*S-1-5-32-545">
<!ENTITY SAMBA____USER_ID_____adb831a7fdd83dd1e2a309ce7591dff8__ "Guest">
<!ENTITY SAMBA____USER_ID_____9fa835214b4fc8b6102c991f7d97c2f8__ "*S-1-5-32-547">
<!ENTITY SAMBA____USER_ID_____bf8caafa94a19a6262bad2e8b6d4bce6__ "*S-1-5-32-546">
<!ENTITY SAMBA____USER_ID_____a45da96d0bf6575970f2d27af22be28a__ "System">
<!ENTITY SAMBA____USER_ID_____171d33a63ebd67f856552940ed491ad3__ "s-1-5-32-545">
<!ENTITY SAMBA____USER_ID_____7140932fff16ce85cc64d3caab588d0d__ "s-1-1-0">
Nr   rP   rQ   r   r   r    r-   rR   r9   r:   r;   rS   ri   rT   rU   rV   rW   r   rX   rg   r.   T)r   FrY   rZ   r[   )r   r   r   r]   r^   r1   r_   r
   Śwriter"   r#   r$   ra   rb   r   r2   r3   )r&   rc   rd   re   Zalt_entity_fileŚfZgen_entity_filer0   r'   r(   r)   r   r   r   Śtest_backup_restore_generalizev  s    ’

(
’’’ų


’ū
ž’ż

’’’ż

ö
’’’ż

z-GpoCmdTestCase.test_backup_restore_generalizec                 C   sĪ  |   ddtjd  dtjd tjd f ”| _tj | jd”}t |” dd	d
}t| j| j	}|D ]:}|| }t
 ” }||_t
 |t
j|”||< | j |” qdzŖ|  dd| j	ddtjd  d|”\}}}	|  |||	d” d| d”d  d”d  }
tj |d|
”}|  ddd|ddtjd  d| jdtjd tjd f d”
\}}}	|  |||	d” d| d”d  d”d  }t| j|}|  t|d” |D ]8}|  ||d v ” |  || t|d | d ” qW |r |  dd|ddtjd  dtjd tjd f ”\}}}	|  |||	d” t tj | jd”” t tj | jd”” n||r|  dd|ddtjd  dtjd tjd f ”\}}}	|  |||	d” t tj | jd”” t tj | jd”” 0 d S )Nr   r   r>   r9   r?   r@   rN   zź[{35378EAC-683F-11D2-A89A-00C04FBBCFA2}{53D6AB1B-2488-11D1-A28C-00C04FB94F17}][{827D319E-6EAC-11D2-A4EA-00C04F79F83A}{803E14A0-B4FB-11D0-A0D0-00A0C90F574B}][{B1BE8D72-6EAC-11D2-A4EA-00C04F79F83A}{53D6AB1B-2488-11D1-A28C-00C04FB94F17}]z[{3060E8D0-7020-11D2-842D-00C04FA372D4}{3060E8CE-7020-11D2-842D-00C04FA372D4}][{35378EAC-683F-11D2-A89A-00C04FBBCFA2}{0F6B957E-509E-11D1-A7CC-0000F87571E3}])ZgPCMachineExtensionNamesZgPCUserExtensionNamesr   rX   r    r-   r.   rT   rU   rV   rW   r   r/   rP   ZRESTORE_EXTr:   r;   rS   ri   rZ   r[   )rC   r   r#   rD   r   r   r1   r_   r   r0   rF   rG   rA   rH   rI   rJ   r"   r$   ra   r   ZassertEqualŚlenŚ
assertTrueŚstrr2   r3   )r&   rd   Ś
extensionsZgpo_dnZextŚdatarL   r'   r(   r)   Zguidr0   Śmsgr   r   r   Ś%test_backup_with_extension_attributesÅ  s    
’’
ż’ż

’’’ł
	&
’’’ż
ö
’’’ż
z4GpoCmdTestCase.test_backup_with_extension_attributesc                 C   sŌ   t  }| tjd ” | dd”}tj |tjd  ” dd”}|  ddd	d
tjd  dtj t	d” dtjd tjd f ”\}}}|  
|||d” |  tj |”d” |  tj tj |d””d” t |” d S )NZSERVERCONFFILEr   ZsysvolZREALMZPoliciesZPolicyDefinitionsr   Zadmxloadr   r   r    z--admx-dir=%szlibgpo/admxr9   r:   r;   z Filling PolicyDefinitions failedz!PolicyDefinitions was not createdz
samba.admx)r   Śloadr   r#   Śgetr   r   Ślowerr"   Śsource_pathr$   rs   Śexistsr2   r3   )r&   ZlpZ
local_pathZ	admx_pathr'   r(   r)   r   r   r   Śtest_admx_load
  s>    ’’’’’’ś
	
’’’zGpoCmdTestCase.test_admx_loadc                    sč   t t|  ”  |  dd| jddtjd  dtjd tjd f d	| j”\}}}|  |||d
” t	 
tj | jd”” z"d| d”d  d”d  | _W n  ty¶   |  d| ” Y n0 tj t ” dddd”| _tj | jd”| _dS )z#set up a temporary GPO to work withr   Zcreater   r   r    r9   r:   r;   r-   z!Ensuring gpo created successfullyr/   rT   rU   rV   rW   r   z!Failed to find GUID in output: %sZsource4ZselftestZ
provisionszgeneralized-gpo-backuprm   N)Śsuperr   ŚsetUpr"   Śgpo_namer   r#   r1   r$   r2   r3   r   r   ra   r0   Ś
IndexErrorZfailŚsambaZsource_tree_topdirr]   r`   r%   ©Ś	__class__r   r   r   !  s"    ż
"žzGpoCmdTestCase.setUpc                    s\   |   dd| jddtjd  dtjd tjd f ”\}}}|  |||d	” tt|  ”  d
S )z%remove the temporary GPO to work withr   rZ   r   r   r    r9   r:   r;   r[   N)r"   r0   r   r#   r$   r   r   ŚtearDownr%   r   r   r   r   5  s    :zGpoCmdTestCase.tearDown)Ś__name__Ś
__module__Ś__qualname__Ś__doc__r   r^   r*   r,   r4   r8   r<   r=   rM   rf   rk   rl   rq   rx   r~   r   r   Ś__classcell__r   r   r   r   r   Q   s$   !3WSOEr   )TTF)r   rF   r   Zsamba.tests.samba_tool.baser   r2   Zsamba.netcmd.gpor   r   Zsamba.paramr   r   Śabspathr   ŚdirnameŚ__file__r|   r   r   r   r   r   r   Ś<module>   s   
2