
    bp                     6   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	i fdZ
i fdZi fd	Zi fd
Zi fdZi fdZi fdZi fdZi fdZi fdZi fdZi fdZi fdZi fdZi fdZi fdZi fdZi fdZi fdZi fdZi fdZd Zd Z d Z!d Z"d"d!Z#dS )#zFFunctions for setting up a Samba configuration (security descriptors).    )security)ndr_pack)get_schema_descriptorNc                     d| z  }|                                 D ]\  }}|                    ||          }t          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   &   sa    '>D~~'' ' 's||D#&&


'
'j
9
9CC==    c                 (    d}t          || |          S )N r   r   r   r   s      r   get_empty_descriptorr   0   s    DtZ222r   c                 (    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   7   s    AD tZ222r   c                 (    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   J   s    *D tZ222r   c                 (    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    \   s    
fD tZ222r   c                 (    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"   k   s    <D tZ222r   c                 (    d}t          || |          S )NzXD:AI(A;;RPLCLORC;;;AU)(A;;RPWPCRCCLCLORCWOWDSW;;;EA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)r   r   s      r   'get_config_delete_protected1_descriptorr$   s       /D tZ222r   c                 (    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                 (    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                 (    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)(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    0<Db tZ222r   c                 (    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22r   c                 (    d}t          || |          S )Na
  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)(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_descriptorr/      s    4Dj tZ222r   c                 (    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_descriptorr1     s    	D tZ222r   c                 (    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_descriptorr3     s    D tZ222r   c                 (    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_descriptorr5     s    D tZ222r   c                 (    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_descriptorr7   *  s    D tZ222r   c                 (    d}t          || |          S )NzXD:AI(A;;RPLCLORC;;;AU)(A;;RPWPCRCCLCLORCWOWDSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)r   r   s      r   'get_domain_delete_protected1_descriptorr9   6  r%   r   c                 (    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                 (    d}t          || |          S )Na  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)(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=   F  s    2<Df tZ222r   c                 (    d}t          || |          S )NzTO:SYG:SYD:AI(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;CI;RPWPCRCCDCLCRCWOWDSDDTSW;;;ED)r   r   s      r   'get_dns_forest_microsoft_dns_descriptorr?   }  s    /D tZ222r   c                 (    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_descriptorrA     s    /D
 tZ222r   c                 (    d}t          || |          S )NzO:SubdomainAdminsG:SubdomainAdminsD:AI(A;;RPWPCRCCLCLORCWOWDSW;;;SubdomainAdmins)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)r   r   s      r   +get_paritions_crossref_subdomain_descriptorrC     r%   r   c                    t          j        | dt          |                                           z            t          ft          j        | dt          |                                           z            t
          ft          j        | dt          |                                           z            t          ft          j        | dt          |                                           z            t          ft          j        | dt          |                                           z            t          ft          j        | dt          |                                           z            t          ft          j        | dt          |                                           z            t          ft          j        | dt          |                                           z            t          ft          j        | d	t          |                                           z            t          ft          j        | dt          |                                           z            t          ft          j        | d
t          |                                           z            t          ft          j        | dt          |                                           z            t           ft          j        | dt          |                                           z            t"          ft          j        | dt          |                                           z            t           ft          j        | dt          |                                           z            t           ft          j        | dt          |                                           z            t           ft          j        | dt          |                                           z            t$          ft          j        | dt          |                                           z            t$          ft          j        | dt          |                                           z            t&          ft          j        | dt          |                                           z            t(          ft          j        | dt          |                                           z            t,          fg}|                     ddt           j        dg          }|d         d         D ]}t          j        | dt          |                                           z            }t          j        | |                    d                    |k    rt          j        | dt          |          z            t6          f}|                    |           t          j        | dt          |          z            t          f}|                    |           t          j        | dt          |          z            t
          f}|                    |           t          j        | dt          |          z            t:          f}|                    |           mt          j        | dt          |                                           z            }t          j        | |                    d                    |k    rt          j        | dt          |          z            t6          f}|                    |           t          j        | dt          |          z            t          f}|                    |           t          j        | dt          |          z            t
          f}|                    |           t          j        | dt          |          z            t          f}|                    |           |S )Nr   z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;   r9   r-   r/   r1   r3   r7   rA   get_config_basednr   r"   r'   r$   r)   r   r    get_schema_basednr   search
SCOPE_BASEget_root_basedndecoder=   appendr?   )samdbsubcontainerscurrentncdnsforestdncdnsdomaindns          r   get_wellknown_sdsr]     s    
tc%//"3"3444	5	57LM	+c%//2C2C.D.DD	E	EGno	~EOO,=,=(>(>>	?	?Ahi	-EOO4E4E0F0FF	G	GImn	U__->->)?)??	@	@B_`	(3u/@/@+A+AA	B	BDcd	}s5??+<+<'='==	>	>@[\	1C8I8I4J4JJ	K	KMno	5EOO<M<M8N8NN	O	OQxy	tc%"9"9";";<<<	=	=?TU	*S1H1H1J1J-K-KK	L	LNop	1C8O8O8Q8Q4R4RR	S	SU~	'#e.E.E.G.G*H*HH	I	IKrs	1C8O8O8Q8Q4R4RR	S	SU~	<s5CZCZC\C\?]?]]	^	^  aJ  	K	,s53J3J3L3L/M/MM	N	NPyz	03u7N7N7P7P3Q3QQ	R	RT{|	.U5L5L5N5N1O1OO	P	PRyz	)C0G0G0I0I,J,JJ	K	KMmn	}s5+B+B+D+D'E'EE	F	FHcd	tc%"9"9";";<<<	=	=?TU/M4 ll&7 "#."2!3  5 5G aj)* $ $fU$:c%BWBWBYBY>Z>Z$[\\6%6**++{::tc+&6&66779UVA  ###5K8H8HHII8:A  ###3c+6F6FFGG8:A  ###3c+6F6FFGG8:A  ###fU$:c%//BSBS>T>T$UVV6%6**++{::tc+&6&66779UVA  ###5K8H8HHII8:A  ###3c+6F6FFGG8:A  ###3c+6F6FFGG8:A  ###r   c                     t          j        d          }|                    |           }i }g |d<   |D ]G}t          |d                   dk    r|d         |d<   |d                             |d                    H|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lenrU   )aclptabhashes        r   
chunck_aclrk     s     	
%&&A
))C..CDDL " "qt99q==aDDMVAaD!!!!Kr   c                    t          j        d          }|                    |           }i }|D ]^}|d         dk    r|d         |d<   |d         dk    r|d         |d<   |d         dk    r|d         |d	<   |d         d
k    r|d         |d<   _|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:ra   ownerzG:groupzD:daclzS:sacl)rb   rc   rd   )r   rg   rh   ri   rj   s        r   chunck_sddlrq     s     	
45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 ]4}||         }|j
        t           j        z  s|                    |           45g }| j        | j        j        }t          dt          |                    D ]4}||         }|j
        t           j        z  s|                    |           45|S )zvGet the SD without any inherited ACEs

    :param sd: SD to strip
    :return: An SD with inherited ACEs stripped
    Nr   )r   r
   	owner_sid	group_sidtyperevisionrp   r_   rangere   r`   SEC_ACE_FLAG_INHERITED_ACEsacl_addro   dacl_add)sdsd_cleanr_   iaces        r   get_clean_sdr     s    "$$HHHGHMHD	ww|1c$ii    1gy8>> 	c"""	 D	ww|1c$ii    1gy8>> 	c"""	 Or   Tc                 T   t          |                              |          }t          |                               |          }d}t          |          }t          |          }d|vrd}n+d|v r'|d         |d         k    rd|d         d|d         d}d|vrd|z  }n-d|v r)|d         |d         k    r|d	|d         d|d         d}d
g}	|r|	                    d           |	D ]<}
|
|v r|
|v rt	                      }t	                      }t          ||
                   }t          ||
                   }|d         D ]}|                    |           |d         D ]}|                    |           t	          |          D ]0}||v r*|                    |           |                    |           1t          |          t          |          z   dk    r"|d|
d}|D ]
}|d|d}|D ]
}|d|d}|
|v r|
|vr
|d|
d},|
|vr|
|v r|d|
d}>|S )a  Get the difference between 2 sd

    This function split the textual representation of ACL into smaller
    chunck 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   rm   z	No owner in current SDz	Owner mismatch: z
 (in ref) z(in current)
rn   z%s	No group in current SDz	Group mismatch: ro   rp   r_   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_sddlrq   rU   setrk   addremovere   )refsdcursd	domainsid	checkSaclcursddlrefsddltxthash_curhash_refpartsparth_curh_refc_curc_refelemkitems                     r   get_diff_sdsr   '  s    5!!)))44G5!!)))44G
C7##H7##Hh(	H		'!2hw6G!G!G!G"*7"3"3"3Xg5F5F5FH h*S0	H		'!2hw6G!G!G"%##x'8'8'8(7:K:K:KM HE V #E #E8 0 0 EEEEEEx~..Ex~..Ef    		$f    		$ZZ $ $::LLOOOLLOOO5zzCJJ&**>Acc444I " 7 7D,/CC7CC " 5 5D*-##ttt5CC X$h"6"6<?CCFCC!!dh&6&6:=##tttDCJr   )T)$__doc__samba.dcerpcr   	samba.ndrr   samba.schemar   rK   rb   r   r   r   r   r    r"   r$   r'   r)   r+   r-   r/   r1   r3   r5   r7   r9   r;   r=   r?   rA   rC   r]   rk   rq   r   r    r   r   <module>r      s  6 M L ! ! ! ! ! !       . . . . . . 



 				
   /1 3 3 3 3 02 3 3 3 3& ;= 3 3 3 3$ 68 3 3 3 3 <> 3 3 3 3 BD 3 3 3 3 DF 3 3 3 3 BD 3 3 3 3 02 23 23 23 23j ?A 3 3 3 3 8: 63 63 63 63r :< 3 3 3 3 68 
3 
3 
3 
3 BD 	3 	3 	3 	3 <> 	3 	3 	3 	3 BD 3 3 3 3 BD 3 3 3 3 79 43 43 43 43n BD 3 3 3 3 BD 3 3 3 3 FH 3 3 3 3@ @ @F  (  0     FG G G G G Gr   