
    de}                        d Z ddlmZ ddlmZ ddlmZ ddlZddl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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 Z d Z!d Z"d  Z#	 	 d#d!Z$y)$zFFunctions for setting up a Samba configuration (security descriptors).    )security)ndr_pack)get_schema_descriptorNc                     d| z  }|j                         D ]  \  }}|j                  ||      } t        j                  j	                  ||      }t        |      S )N%s)itemsreplacer   
descriptor	from_sddlr   )sddl_in
domain_sidname_mapsddlnamesidsecs          2/usr/lib/python3/dist-packages/samba/descriptor.pysddl2binaryr   &   sY    '>D~~' 's||D#&' 


'
'j
9CC=    c                 (    |i }d}t        || |      S )N r   r   r   r   s      r   get_empty_descriptorr   0   s!    DtZ22r   c                 (    |i }d}t        || |      S )Nz9O:SYG:SYD:PAI(A;;RPWPCCDCLCRCWOWDSDSW;;;SY)(A;;RPLC;;;BA)r   r   s      r   get_deletedobjects_descriptorr   :   s%    D tZ22r   c                 (    |i }d}t        || |      S )Na  O:EAG:EAD:(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;BA)(A;;RPLCLORC;;;AU)(A;CI;RPWPCRCCDCLCLORCWOWDSDDTSW;;;EA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;CIIO;RPWPCRCCLCLORCWOWDSDSW;;;DA)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;ED)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;BA)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;RO)S:(AU;SA;WPWOWD;;;WD)(AU;SA;CR;;;BA)(AU;SA;CR;;;DU)(OU;SA;CR;45ec5156-db7e-47bb-b53f-dbeb2d03c40f;;WD)r   r   s      r   get_config_descriptorr   D   s&    AD tZ22r   c                 (    |i }d}t        || |      S )Na   D:(A;;LCLORC;;;AU)(OA;;RP;e48d0154-bcf8-11d1-8702-00c04fb96050;;AU)(OA;;RP;d31a8757-2447-4545-8081-3bb610cacbf2;;AU)(OA;;RP;66171887-8f3c-11d0-afda-00c04fd930c9;;AU)(OA;;RP;032160bf-9824-11d1-aec0-0000f80367c1;;AU)(OA;;RP;789ee1eb-8c8e-4e4c-8cec-79b31b7617b5;;AU)(OA;;RP;5706aeaf-b940-4fb2-bcfc-5268683ad9fe;;AU)(A;;RPWPCRCCLCLORCWOWDSW;;;EA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;CC;;;ED)(OA;CIIO;WP;3df793df-9858-4417-a701-735a1ecebf74;bf967a8d-0de6-11d0-a285-00aa003049e2;BA)S:(AU;CISA;WPCRCCDCWOWDSDDT;;;WD)r   r   s      r    get_config_partitions_descriptorr    Z   s%    *D tZ22r   c                 (    |i }d}t        || |      S )Na  D:(A;;RPLCLORC;;;AU)(OA;CIIO;SW;d31a8757-2447-4545-8081-3bb610cacbf2;f0f8ffab-1191-11d0-a060-00aa006c33ed;RO)(A;;RPWPCRCCLCLORCWOWDSW;;;EA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)S:(AU;CISA;CCDCSDDT;;;WD)(OU;CIIOSA;CR;;f0f8ffab-1191-11d0-a060-00aa006c33ed;WD)(OU;CIIOSA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967ab3-0de6-11d0-a285-00aa003049e2;WD)(OU;CIIOSA;WP;f30e3bbf-9ff0-11d1-b603-0000f80367c1;bf967ab3-0de6-11d0-a285-00aa003049e2;WD)(OU;CIIOSA;WP;3e10944c-c354-11d0-aff8-0000f80367c1;b7b13124-b82e-11d0-afee-0000f80367c1;WD)r   r   s      r   get_config_sites_descriptorr"   o   s&    
fD tZ22r   c                 (    |i }d}t        || |      S )NziD:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;EA)(A;;RPLCLORC;;;BA)(OA;;CR;4ecc03fe-ffc0-4947-b630-eb672a8a9dbc;;WD)r   r   s      r   !get_config_ntds_quotas_descriptorr$      s%    <D tZ22r   c                 (    |i }d}t        || |      S )NzXD:AI(A;;RPLCLORC;;;AU)(A;;RPWPCRCCLCLORCWOWDSW;;;EA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)r   r   s      r   'get_config_delete_protected1_descriptorr&      %    /D tZ22r   c                 (    |i }d}t        || |      S )NzXD:AI(A;;RPLCLORC;;;WD)(A;;RPWPCRCCLCLORCWOWDSW;;;EA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)r   r   s      r   )get_config_delete_protected1wd_descriptorr)      r'   r   c                 (    |i }d}t        || |      S )NzZD:AI(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSW;;;EA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)r   r   s      r   'get_config_delete_protected2_descriptorr+      r'   r   c                 (    |i }d}t        || |      S )Na  O:BAG:BAD:AI(OA;CIIO;RP;4c164200-20c0-11d0-a768-00aa006e0529;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;4c164200-20c0-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;037088f8-0ae1-11d2-b422-00a0c968f939;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;037088f8-0ae1-11d2-b422-00a0c968f939;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;RO)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;DD)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a86-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a9c-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967aba-0de6-11d0-a285-00aa003049e2;ED)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;BA)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;e2a36dc9-ae17-47c3-b58b-be34c55ba633;;S-1-5-32-557)(OA;;RP;c7407360-20bf-11d0-a768-00aa006e0529;;RU)(OA;;RP;b8119fd0-04f6-4762-ab7a-4986c76b3f9a;;RU)(OA;CIIO;RPLCLORC;;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RPLCLORC;;bf967a9c-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RPLCLORC;;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;CR;05c74c5e-4deb-43b4-bd9f-86664c2a7fd5;;AU)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;ED)(OA;;CR;ccc2dc7d-a6ad-4a7a-8846-c04e3cc53501;;AU)(OA;;CR;280f369c-67c7-438e-ae98-1d46f3c6f541;;AU)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;RP;b8119fd0-04f6-4762-ab7a-4986c76b3f9a;;AU)(OA;CIIO;RPWPCR;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;PS)(OA;CIIO;WP;ea1b7b93-5e48-46d5-bc6c-4df4fda78a35;bf967a86-0de6-11d0-a285-00aa003049e2;PS)(OA;;CR;3e0f7e18-2c7a-4c10-ba82-4d926db99a3e;;CN)(OA;OICI;RPWP;3f78c3e5-f79a-46bd-a0b8-9d18116ddc79;;PS)(OA;CI;RPWP;5b47d60f-6090-40b2-9f37-2a4de88f3063;;KA)(OA;CI;RPWP;5b47d60f-6090-40b2-9f37-2a4de88f3063;;EK)(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;PS)(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(A;;RPWPCRCCLCLORCWOWDSW;;;DA)(A;CI;RPWPCRCCDCLCLORCWOWDSDDTSW;;;EA)(A;;RPRC;;;RU)(A;CI;LC;;;RU)(A;CI;RPWPCRCCLCLORCWOWDSDSW;;;BA)(A;;RP;;;WD)(A;;RPLCLORC;;;ED)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)S:AI(OU;CISA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(OU;CISA;WP;f30e3bbf-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(AU;SA;CR;;;DU)(AU;SA;CR;;;BA)(AU;SA;WPWOWD;;;WD)r   r   s      r   get_domain_descriptorr-      s&    7<Dp tZ22r   c                 (    |i }d}t        || |      S )NziD:(A;;RPLCLORC;;;AU)(A;;RPWPCRCCLCLORCWOWDSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)S:(AU;SA;WPCR;;;WD)r   r   s      r   $get_domain_infrastructure_descriptorr/      s%    D tZ22r   c                 (    |i }d}t        || |      S )NaL  D:(OA;CIIO;RP;4c164200-20c0-11d0-a768-00aa006e0529;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;4c164200-20c0-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;037088f8-0ae1-11d2-b422-00a0c968f939;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;037088f8-0ae1-11d2-b422-00a0c968f939;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;RO)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;DD)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a86-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a9c-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967aba-0de6-11d0-a285-00aa003049e2;ED)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;BA)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;e2a36dc9-ae17-47c3-b58b-be34c55ba633;;S-1-5-32-557)(OA;;RP;c7407360-20bf-11d0-a768-00aa006e0529;;RU)(OA;;RP;b8119fd0-04f6-4762-ab7a-4986c76b3f9a;;RU)(OA;CIIO;RPLCLORC;;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RPLCLORC;;bf967a9c-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RPLCLORC;;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;CR;05c74c5e-4deb-43b4-bd9f-86664c2a7fd5;;AU)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;ED)(OA;;CR;ccc2dc7d-a6ad-4a7a-8846-c04e3cc53501;;AU)(OA;;CR;280f369c-67c7-438e-ae98-1d46f3c6f541;;AU)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;RP;b8119fd0-04f6-4762-ab7a-4986c76b3f9a;;AU)(OA;CIIO;RPWPCR;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;PS)(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;OICI;RPWP;3f78c3e5-f79a-46bd-a0b8-9d18116ddc79;;PS)(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;PS)(OA;CIIO;WP;ea1b7b93-5e48-46d5-bc6c-4df4fda78a35;bf967a86-0de6-11d0-a285-00aa003049e2;PS)(A;;RPWPCRCCLCLORCWOWDSW;;;DA)(A;CI;RPWPCRCCDCLCLORCWOWDSDDTSW;;;EA)(A;;RPRC;;;RU)(A;CI;LC;;;RU)(A;CI;RPWPCRCCLCLORCWOWDSDSW;;;BA)(A;;RP;;;WD)(A;;RPLCLORC;;;ED)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)S:(OU;CISA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(OU;CISA;WP;f30e3bbf-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(AU;SA;CR;;;DU)(AU;SA;CR;;;BA)(AU;SA;WPWOWD;;;WD)r   r   s      r   get_domain_builtin_descriptorr1      s&    8Dr tZ22r   c                 (    |i }d}t        || |      S )NaY  D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSW;;;DA)(OA;;CCDC;bf967a86-0de6-11d0-a285-00aa003049e2;;AO)(OA;;CCDC;bf967aba-0de6-11d0-a285-00aa003049e2;;AO)(OA;;CCDC;bf967a9c-0de6-11d0-a285-00aa003049e2;;AO)(OA;;CCDC;bf967aa8-0de6-11d0-a285-00aa003049e2;;PO)(A;;RPLCLORC;;;AU)(OA;;CCDC;4828cc14-1437-45bc-9b07-ad6f015e5f28;;AO)S:r   r   s      r   get_domain_computers_descriptorr3   9  s%    	D tZ22r   c                 (    |i }d}t        || |      S )Na&  D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSW;;;DA)(OA;;CCDC;bf967aba-0de6-11d0-a285-00aa003049e2;;AO)(OA;;CCDC;bf967a9c-0de6-11d0-a285-00aa003049e2;;AO)(OA;;CCDC;bf967aa8-0de6-11d0-a285-00aa003049e2;;PO)(A;;RPLCLORC;;;AU)(OA;;CCDC;4828cc14-1437-45bc-9b07-ad6f015e5f28;;AO)S:r   r   s      r   get_domain_users_descriptorr5   J  s%    D tZ22r   c                 (    |i }d}t        || |      S )NzD:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSW;;;DA)(OA;;CCDC;ce206244-5827-4a86-ba1c-1c0c386c1b64;;AO)(OA;;CCDC;bf967aba-0de6-11d0-a285-00aa003049e2;;AO)(OA;;CCDC;bf967a9c-0de6-11d0-a285-00aa003049e2;;AO)(A;;RPLCLORC;;;AU)S:r   r   s      r   'get_managed_service_accounts_descriptorr7   Z  s%    D tZ22r   c                 (    |i }d}t        || |      S )NzD:(A;;RPLCLORC;;;AU)(A;;RPWPCRCCLCLORCWOWDSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;ED)S:(AU;SA;CCDCWOWDSDDT;;;WD)(AU;CISA;WP;;;WD)r   r   s      r   !get_domain_controllers_descriptorr9   i  s%    D tZ22r   c                 (    |i }d}t        || |      S )NzXD:AI(A;;RPLCLORC;;;AU)(A;;RPWPCRCCLCLORCWOWDSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)r   r   s      r   'get_domain_delete_protected1_descriptorr;   x  r'   r   c                 (    |i }d}t        || |      S )NzZD:AI(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)r   r   s      r   'get_domain_delete_protected2_descriptorr=     r'   r   c                 (    |i }d}t        || |      S )NaX  O:SYG:BAD:AI(OA;CIIO;RP;4c164200-20c0-11d0-a768-00aa006e0529;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;4c164200-20c0-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;037088f8-0ae1-11d2-b422-00a0c968f939;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RP;037088f8-0ae1-11d2-b422-00a0c968f939;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;RO)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a86-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a9c-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967aba-0de6-11d0-a285-00aa003049e2;ED)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;BA)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;e2a36dc9-ae17-47c3-b58b-be34c55ba633;;S-1-5-32-557)(OA;;RP;c7407360-20bf-11d0-a768-00aa006e0529;;RU)(OA;;RP;b8119fd0-04f6-4762-ab7a-4986c76b3f9a;;RU)(OA;CIIO;RPLCLORC;;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;RPLCLORC;;bf967a9c-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RPLCLORC;;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;CR;05c74c5e-4deb-43b4-bd9f-86664c2a7fd5;;AU)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;ED)(OA;;CR;ccc2dc7d-a6ad-4a7a-8846-c04e3cc53501;;AU)(OA;;CR;280f369c-67c7-438e-ae98-1d46f3c6f541;;AU)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;RP;b8119fd0-04f6-4762-ab7a-4986c76b3f9a;;AU)(OA;CIIO;RPWPCR;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;PS)(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;OICI;RPWP;3f78c3e5-f79a-46bd-a0b8-9d18116ddc79;;PS)(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;PS)(OA;CIIO;WP;ea1b7b93-5e48-46d5-bc6c-4df4fda78a35;bf967a86-0de6-11d0-a285-00aa003049e2;PS)(A;;RPWPCRCCLCLORCWOWDSW;;;DA)(A;CI;RPWPCRCCDCLCLORCWOWDSDDTSW;;;EA)(A;;RPRC;;;RU)(A;CI;LC;;;RU)(A;CI;RPWPCRCCLCLORCWOWDSDSW;;;BA)(A;;RP;;;WD)(A;;RPLCLORC;;;ED)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)S:AI(OU;CISA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(OU;CISA;WP;f30e3bbf-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(AU;SA;CR;;;DU)(AU;SA;CR;;;BA)(AU;SA;WPWOWD;;;WD)r   r   s      r   get_dns_partition_descriptorr?     s&    6<Dn tZ22r   c                 (    |i }d}t        || |      S )NzTO:SYG:SYD:AI(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;CI;RPWPCRCCDCLCRCWOWDSDDTSW;;;ED)r   r   s      r   'get_dns_forest_microsoft_dns_descriptorrA     s%    /D tZ22r   c                 (    |i }d}t        || |      S )NzO:SYG:SYD:AI(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;CI;RPWPCRCCDCLCRCWOWDSDDTSW;;;DnsAdmins)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;CI;RPWPCRCCDCLCRCWOWDSDDTSW;;;ED)r   r   s      r   'get_dns_domain_microsoft_dns_descriptorrC     s%    /D
 tZ22r   c                 (    |i }d}t        || |      S )NzO:SubdomainAdminsG:SubdomainAdminsD:AI(A;;RPWPCRCCLCLORCWOWDSW;;;SubdomainAdmins)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)r   r   s      r   +get_paritions_crossref_subdomain_descriptorrE     r'   r   c                    t        j                  | dt        | j                               z        t        ft        j                  | dt        | j                               z        t
        ft        j                  | dt        | j                               z        t        ft        j                  | dt        | j                               z        t        ft        j                  | dt        | j                               z        t        ft        j                  | dt        | j                               z        t        ft        j                  | dt        | j                               z        t        ft        j                  | dt        | j                               z        t        ft        j                  | d	t        | j                               z        t        ft        j                  | d
t        | j                               z        t        ft        j                  | dt        | j                               z        t        ft        j                  | dt        | j                               z        t
        ft        j                  | dt        | j                               z        t         ft        j                  | dt        | j                               z        t"        ft        j                  | dt        | j                               z        t$        ft        j                  | dt        | j                               z        t"        ft        j                  | dt        | j                               z        t"        ft        j                  | dt        | j                               z        t"        ft        j                  | dt        | j                               z        t&        ft        j                  | dt        | j                               z        t&        ft        j                  | dt        | j                               z        t(        ft        j                  | dt        | j                               z        t*        ft        j                  | dt        | j-                               z        t.        fg}| j1                  ddt         j2                  dg      }|d   d   D ]  }t        j                  | dt        | j5                               z        }t        j                  | |j7                  d            |k(  rt        j                  | dt        |      z        t8        f}|j;                  |       t        j                  | dt        |      z        t
        f}|j;                  |       t        j                  | dt        |      z        t        f}|j;                  |       t        j                  | dt        |      z        t        f}|j;                  |       t        j                  | dt        |      z        t<        f}|j;                  |       |t        j                  | dt        | j                               z        }t        j                  | |j7                  d            |k(  st        j                  | dt        |      z        t8        f}|j;                  |       t        j                  | dt        |      z        t
        f}|j;                  |       t        j                  | dt        |      z        t        f}|j;                  |       t        j                  | dt        |      z        t        f}|j;                  |       t        j                  | dt        |      z        t        f}|j;                  |        |S )Nr   zCN=Deleted Objects,%szCN=LostAndFound,%szCN=System,%szCN=Infrastructure,%szCN=Builtin,%szCN=Computers,%szCN=Users,%szOU=Domain Controllers,%szCN=MicrosoftDNS,CN=System,%szCN=NTDS Quotas,%szCN=LostAndFoundConfig,%szCN=Services,%szCN=Physical Locations,%sz#CN=WellKnown Security Principals,%szCN=ForestUpdates,%szCN=DisplaySpecifiers,%szCN=Extended-Rights,%szCN=Partitions,%szCN=Sites,%sz(objectClass=*)r   namingContexts)
expressionbasescopeattrsr   zDC=ForestDnsZones,%sutf8zCN=MicrosoftDNS,%szDC=DomainDnsZones,%s)ldbDnstr	domain_dnr-   r   r=   r;   r/   r1   r3   r5   r9   rC   get_config_basednr   r$   r)   r&   r+   r    r"   get_schema_basednr   search
SCOPE_BASEget_root_basedndecoder?   appendrA   )samdbsubcontainerscurrentncdnsforestdncdnsdomaindns          r   get_wellknown_sdsr_     s@    
tc%//"344	57LM	.U__5F1GG	HJgh	+c%//2C.DD	EGno	~EOO,=(>>	?Ahi	-EOO4E0FF	GImn	U__->)??	@B_`	(3u/@+AA	BDcd	}s5??+<'==	>@[\	1C8I4JJ	KMno	5EOO<M8NN	OQxy	tc%"9"9";<<	=?TU	.U5L5L5N1OO	PRop	*S1H1H1J-KK	LNop	1C8O8O8Q4RR	SU~	'#e.E.E.G*HH	IKrs	1C8O8O8Q4RR	SU~	<s5CZCZC\?]]	^  aJ  	K	,s53J3J3L/MM	NPyz	03u7N7N7P3QQ	RT{|	.U5L5L5N1OO	PRyz	)C0G0G0I,JJ	KMmn	}s5+B+B+D'EE	FHcd	tc%"9"9";<<	=?TU3M8 ll&7 "#.."2!3  5G aj)* #$ffU$:c%BWBWBY>Z$[\66%6*+{:tc+&6679UVA  #6[9IIJ.0A  #5K8HHI8:A  #3c+6FFG8:A  #3c+6FFG8:A  #ffU$:c%//BS>T$UV66%6*+{:tc+&6679UVA  #6[9IIJ.0A  #5K8HHI8:A  #3c+6FFG8:A  #3c+6FFG8:A  #G#$J r   c                     t        j                  d      }|j                  |       }i }g |d<   |D ]2  }t        |d         dkD  r|d   |d<   |d   j	                  |d          4 |S )zzReturn separate ACE of an ACL

    :param acl: A string representing the ACL
    :return: A hash with different parts
    z(\w+)?(\(.*?\))acesr   flags   )recompilefindalllenrW   )aclptabhashes        r   
chunck_aclrm   8  sv     	

%&A
))C.CDDL "qt9q=aDDMVAaD!"
 Kr   c                     t        j                  d      }|j                  |       }i }|D ]C  }|d   dk(  r|d   |d<   |d   dk(  r|d   |d<   |d   dk(  r|d   |d	<   |d   d
k(  s<|d   |d<   E |S )z Return separate parts of the SDDL (owner, group, ...)

    :param sddl: An string containing the SDDL to chunk
    :return: A hash with the different chunk
    z([OGDS]:)(.*?)(?=(?:[GDS]:|$))r   zO:rc   ownerzG:groupzD:daclzS:sacl)rd   re   rf   )r   ri   rj   rk   rl   s        r   chunck_sddlrs   L  s     	

45A
))D/CD  Q44<aDDMQ44<aDDMQ44<Q4DLQ44<Q4DL  Kr   c                 ~   t        j                         }| j                  |_        | j                  |_        | j                  |_        | j
                  |_        g }| j                  | j                  j                  }t        dt        |            D ]6  }||   }|j                  t         j                  z  r&|j                  |       8 g }| j                  | j                  j                  }t        dt        |            D ]6  }||   }|j                  t         j                  z  r&|j                  |       8 |S )zvGet the SD without any inherited ACEs

    :param sd: SD to strip
    :return: An SD with inherited ACEs stripped
    r   )r   r
   	owner_sid	group_sidtyperevisionrr   ra   rangerg   rb   SEC_ACE_FLAG_INHERITED_ACEsacl_addrq   dacl_add)sdsd_cleanra   iaces        r   get_clean_sdr   d  s    ""$HHHGGHMHD	wwww||1c$i  1gyy8>>>c" D	wwww||1c$i  1gyy8>>>c" Or   c                    t        |      j                  |      }t        |       j                  |      }d}t        |      }t        |      }	d|vrd}nd|	v r|d   |	d   k7  rd|	d   d|d   d}d|vrd|z  }n d|	v r|d   |	d   k7  r|d	|	d   d|d   d}d
g}
|r|
j                  d       |
D ](  }||v r||	v rt	               }t	               }t        ||         }t        |	|         }|d   D ]  }|j                  |        |d   D ]  }|j                  |        t	        |      D ])  }||v s|j                  |       |j                  |       + t        |      t        |      z   dkD  s|dk(  rt        |      dk(  r|r y|d|d}|D ]
  }|d|d} |D ]
  }|d|d} ||v r||	vr
|d|d}||vs||	v s!|d|d}+ |S )a~  Get the difference between 2 sd

    This function split the textual representation of ACL into smaller
    chunk in order to not to report a simple permutation as a difference

    :param refsddl: First sddl to compare
    :param cursddl: Second sddl to compare
    :param checkSacl: If false we skip the sacl checks
    :return: A string that explain difference between sddls
    r   ro   z	No owner in current SDz	Owner mismatch: z
 (in ref) z(in current)
rp   z%s	No group in current SDz	Group mismatch: rq   rr   ra   r   z	Part z@ is different between reference and current here is the detail:
z		z% ACE is not present in the reference
z# ACE is not present in the current
z	Reference ACL hasn't a z part
z	Current ACL hasn't a )	r   as_sddlrs   rW   setrm   addremoverg   )refsdcursd	domainsid	checkSaclignoreAdditionalACEscursddlrefsddltxthash_curhash_refpartsparth_curh_refc_curc_refelemkitems                      r   get_diff_sdsr     sS    5!)))4G5!)))4G
C7#H7#Hh(	H	'!2hw6G!G"*7"3Xg5FH h*S0	H	'!2hw6G!G"%x'8(7:KM HEV 'E8 0 EEEEx~.Ex~.Ef  		$  f  		$  Z $:LLOLLO$
 5zCJ&*"9Uq+! ?B4I " 7D,/7C7 " 5D*-t5C5 X$h"6<?FC!dh&6:=tDCO'ER Jr   )N)TF)%__doc__samba.dcerpcr   	samba.ndrr   samba.schemar   rM   rd   r   r   r   r   r    r"   r$   r&   r)   r+   r-   r/   r1   r3   r5   r7   r9   r;   r=   r?   rA   rC   rE   r_   rm   rs   r   r    r   r   <module>r      s   6 M !  . 
 	
333,3*3$3333<3~
3=3@3"3 3333;3|3	33HV(0 F 59&+Lr   