ó
    cÛ–iÐ:  ã                   óò   • S SK Jr  S SKrS SKJrJr  S SKJr  S SKJ	r	  S SK
JrJrJr  S SKJr  S SKJr  S S	KJr  S S
KJrJrJrJr  S SKJr  S SKJr  S SKJr  S SKJr  S SK J!r!J"r"J#r#J$r$  Sr% " S S\&5      r'g)é    )ÚStringION)Ú
ndr_unpackÚndr_pack)Úpreg)Únetcmd_finddc)Úcreate_directory_hierÚsmb_connectionÚ
get_gpo_dn)ÚNTSTATUSError)ÚNumber)Ústr_regtype)ÚNT_STATUS_OBJECT_NAME_INVALIDÚNT_STATUS_OBJECT_NAME_NOT_FOUNDÚNT_STATUS_OBJECT_PATH_NOT_FOUNDÚNT_STATUS_INVALID_PARAMETER)ÚGPTIniParser)Ú
get_string)Úsecurity)Údsacl2fsacl)Ú
REG_BINARYÚREG_MULTI_SZÚREG_SZÚGUIDz
[General]
Version=0
c                   ó€   • \ rS rSrSS jrS rS rS rSS jrS r	S	 r
S
 rS rSS jrS rS rS rS rS rS rSrg)ÚRegistryGroupPoliciesé1   Nc                 ó  • Xl         X l        X0l        X@l        U R                  R	                  S5      nSR                  UR                  5       SUS/5      U l        SR                  U R                  S/5      U l        [        U R                  U R                   5      U l
        U(       a  UR                  S5      (       a  USS  nO [        U R                  U R                  5      n[        USU R                  U R                  S	9U l        [        R                   [        R"                  -  [        R$                  -  nU R                  R'                  U R                  [(        R*                  S
/S9S   n	U	S
   S   n
[-        [        R.                  U
5      R1                  5       n[        R2                  " U R                  R5                  5       5      n[7        X¼5      n[        R.                  R9                  XÜ5      U l        g )NÚrealmÚ\ÚPoliciesz%szRegistry.polzldap://é   Úsysvol)ÚlpÚcredsÚnTSecurityDescriptor©ÚbaseÚscopeÚattrsr   )Úgpor#   r$   ÚsamdbÚgetÚjoinÚlowerÚpol_dirÚpol_filer
   Ú	policy_dnÚ
startswithr   r	   Úconnr   ÚSECINFO_OWNERÚSECINFO_GROUPÚSECINFO_DACLÚsearchÚldbÚ
SCOPE_BASEr   Ú
descriptorÚas_sddlÚdom_sidÚget_domain_sidr   Ú	from_sddlÚfs_sd)Úselfr*   r#   r$   r+   Úhostr   Údc_hostnameÚds_sd_flagsÚmsgÚ	ds_sd_ndrÚds_sdÚ
domain_sidÚsddls                 Ú0/usr/lib/python3/dist-packages/samba/policies.pyÚ__init__ÚRegistryGroupPolicies.__init__2   s‘  € ØŒØŒØŒ
ØŒ
Ø—‘—‘˜GÓ$ˆØ—y‘y %§+¡+£-°¸SÀ$Ð!GÓHˆŒØŸ	™	 4§<¡<°Ð"@ÓAˆŒÜ# D§J¡J°·±Ó9ˆŒæ�D—O‘O I×.Ñ.Ø˜q˜r˜(‰Kä'¨¯©°·±Ó<ˆKä" ;Ø#+Ø&*§g¡gØ)-¯©ñ5ˆŒ	ô  ×-Ñ-Ü×-Ñ-ñ.ä×,Ñ,ñ-ˆð �j‰j×Ñ T§^¡^¼3¿>¹>Ø'=Ð&>ð  ð @Ø@AñCˆàÐ.Ñ/°Ñ2ˆ	Üœ8×.Ñ.°	Ó:×BÑBÓDˆô ×%Ò% d§j¡j×&?Ñ&?Ó&AÓBˆ
Ü˜5Ó-ˆÜ×(Ñ(×2Ñ2°4ÓDˆ�
ó    c                 ó  •  [        [        R                  U R                  R	                  U5      5      nU$ ! [
         aC  nUR                  S   [        [        [        4;   a  [        R                  " 5       n S nAU$ e S nAff = f)Nr   )
r   r   Úfiler3   Úloadfiler   Úargsr   r   r   )r@   r0   Úpol_dataÚes       rI   Ú__load_registry_polÚ)RegistryGroupPolicies.__load_registry_polT   sv   € ð	Ü!¤$§)¡)¨T¯Y©Y×-?Ñ-?ÀÓ-IÓJˆHð ˆøô ó 	Ø�v‰v�a‰yÔ:Ü<Ü<ð>ó >ô  Ÿ9š9›;”ð ˆð ûð	ús   ‚37 ·
BÁ7A?Á>A?Á?Bc                 ó°   • [        U R                  U5        U R                  R                  X#5        U R                  R                  X R                  5        g ©N)r   r3   ÚsavefileÚset_aclr?   )r@   Úfile_dirÚ	file_nameÚdatas       rI   Ú__save_fileÚ!RegistryGroupPolicies.__save_file`   s8   € Ü˜dŸi™i¨Ô2Ø�	‰	×Ñ˜9Ô+Ø�	‰	×Ñ˜)§Z¡ZÕ0rL   c                 ó:   • U R                  X[        U5      5        g rV   )Ú!_RegistryGroupPolicies__save_filer   )r@   r/   r0   rQ   s       rI   Ú__save_registry_polÚ)RegistryGroupPolicies.__save_registry_pole   s   € Ø×Ñ˜¬H°XÓ,>Õ?rL   c                 ó0  • [        U5      [        :w  a  [        S5      eU Hm  n[        U5      [        :w  a  [        S5      e/ SQnU(       d  UR	                  SS/5        [        U Vs/ s H  oUU;   PM	     sn5      (       a  Md  [        S5      e   g s  snf )NzJSON not formatted correctly)ÚkeynameÚ	valuenameÚclassr[   Útype)rf   ÚlistÚSyntaxErrorÚdictÚextendÚall)r@   Ú
json_inputÚremoveÚentryÚkeysÚks         rI   Ú__validate_jsonÚ%RegistryGroupPolicies.__validate_jsonh   sƒ   € Ü�
ÓœtÓ#ÜÐ<Ó=Ð=ÛˆEÜ�E‹{œdÓ"Ü!Ð"@ÓAÐAÚ4ˆDÞØ—‘˜V VÐ,Ô-Ü©DÓ1ªD q˜Uœ
©DÑ1×2Ó2Ü!Ð"@ÓAÐAò  ùò 2s   Á)B
c                 óÊ   • [        US   [        5      (       a  US   $ [        S5       H'  n[        U5      US   R	                  5       :X  d  M%  Us  $    [        SUS   -  5      e)Nrf   é   zUnknown type %s)Ú
isinstancer   Úranger   ÚupperÚ	TypeError)r@   rn   Úis      rI   Ú__determine_data_typeÚ+RegistryGroupPolicies.__determine_data_typet   s`   € Ü�e˜F‘m¤V×,Ñ,Ø˜‘=Ð ä˜2–Y�Ü˜q“> U¨6¡]×%8Ñ%8Ó%:Õ:Ø’Hñ ô Ð)¨E°&©MÑ9Ó:Ð:rL   c                 ó6  • U[         :X  a  [        U5      [        :X  a  [        U5      $ U[        :X  a8  [        U5      [        :X  a%  SR                  U5      S-   nUR                  S5      $ U[        :X  a$  [        U5      [        :X  a  UR                  S5      $ U$ )NÚ z  z	utf-16-leúutf-8)	r   rf   rg   Úbytesr   r-   Úencoder   Ústr)r@   Úrtyper[   s      rI   Ú
__set_dataÚ RegistryGroupPolicies.__set_data}   sz   € à”JÓ¤4¨£:´Ó#5Ü˜“;ÐØ”lÓ"¤t¨D£z´TÓ'9Ø—=‘= Ó&¨Ñ3ˆDØ—;‘;˜{Ó+Ð+Ø”f‹_¤ d£¬sÓ!2Ø—;‘;˜wÓ'Ð'ØˆrL   c                 ó  • UR                    HQ  nUR                  US   :X  d  M  UR                  US   :X  d  M-  U R                  UR                  US   5      Ul          g    [        R                  " 5       nUS   Ul        US   Ul        U R                  U5      Ul        U R                  UR                  US   5      Ul        [        UR                   5      nUR                  U5        XAl         [        U5      Ul        g )Nrc   rd   r[   )Úentriesrc   rd   Ú _RegistryGroupPolicies__set_datarf   r[   r   rn   Ú+_RegistryGroupPolicies__determine_data_typerg   ÚappendÚlenÚnum_entries)r@   rQ   rn   rR   r†   s        rI   Ú__pol_replaceÚ#RegistryGroupPolicies.__pol_replaceˆ   sÐ   € Ø×!Ô!ˆAØ�y‰y˜E )Ñ,Õ,Ø�{‰{˜e KÑ0Õ0ØŸ™¨¯©°°v±Ó?�”Ùñ	 "ô —
’
“ˆAØ˜iÑ(ˆAŒIØ Ñ,ˆAŒKØ×/Ñ/°Ó6ˆAŒFØ—_‘_ Q§V¡V¨U°6©]Ó;ˆAŒFÜ˜8×+Ñ+Ó,ˆGØ�N‰N˜1ÔØ&ÔÜ#& w£<ˆHÕ rL   c                 óÌ   • / nUR                    H<  nUR                  US   :X  a  UR                  US   :X  a  M+  UR                  U5        M>     X1l         [	        U5      Ul        g )Nrc   rd   )r†   rc   rd   r‰   rŠ   r‹   )r@   rQ   rn   r†   rR   s        rI   Ú__pol_removeÚ"RegistryGroupPolicies.__pol_remove™   sY   € ØˆØ×!Ô!ˆAØ—I‘I  yÑ!1Ó1Ø—K‘K 5¨Ñ#5Õ5Ø—‘˜qÖ!ñ "ð #ÔÜ" 7›|ˆÕrL   c                 óü  • U(       d  U(       d  g U R                   S-  n U R                  R                  U5      n[        5       nUR                  U5        SnSnSn	UR                  R                  SS5      (       a>  [        UR                  R                  SS5      R                  S5      5      nUS-  nUS-	  n	U(       a  US-  nU(       a  U	S-  n	U	S-  U-   nUR                  R!                  S5      (       d  UR                  R#                  S5        UR                  R%                  SS['        U5      5        [)        5        n
UR                  R+                  U
5        U
R-                  S5        U R/                  U R                   S	-  UU
R1                  5       R                  S5      5        S S S 5        [2        R4                  " 5       nU R6                  Ul        [2        R:                  " ['        U5      [2        R<                  S
5      US'   U R>                  RA                  U5        g ! [         a4  nUR                  S   [
        [        [        4;   a  [        n S nAGN)e S nAff = f! , (       d  f       NÃ= f)NzGPT.INIr   ÚGeneralÚVersionr~   iÿÿ  é   é   Ú ÚversionNumberÚ	new_value)!r/   r3   rO   r   rP   r   r   r   Ú	GPT_EMPTYr   ÚparseÚini_confÚ
has_optionÚintr,   r€   Úhas_sectionÚadd_sectionÚsetr�   r   ÚwriteÚseekr_   Úreadr8   ÚMessager1   ÚdnÚMessageElementÚFLAG_MOD_REPLACEr+   Úmodify)r@   Úmachine_changedÚuser_changedÚGPT_INIr[   rR   ÚparserÚversionÚmachine_versionÚuser_versionÚout_dataÚms               rI   Úincrement_gpt_iniÚ'RegistryGroupPolicies.increment_gpt_ini¢   s   € Þ¦|ØØ—,‘, Ñ*ˆð	Ø—9‘9×%Ñ% gÓ.ˆDô “ˆØ�‰�TÔØˆØˆØˆØ�?‰?×%Ñ% i°×;Ñ;Ü˜&Ÿ/™/×-Ñ-¨iØ.7ó9ß9?¹À»óJˆGà%¨
Ñ2ˆOØ" b™=ˆLÞØ˜qÑ ˆOÞØ˜AÑˆLØ 2Ñ%¨Ñ8ˆð �‰×*Ñ*¨9×5Ñ5Ø�O‰O×'Ñ'¨	Ô2Ø�‰×Ñ˜I y´#°g³,Ô?ÜŒZ˜8Ø�O‰O×!Ñ! (Ô+Ø�M‰M˜!ÔØ×Ñ˜TŸ\™\¨BÑ.°Ø%Ÿ]™]›_×3Ñ3°GÓ<ô>÷ ô �KŠK‹MˆØ�~‰~ˆŒÜ×+Ò+¬C°«L¼#×:NÑ:NØ,;ó=ˆˆ+‰à�
‰
×Ñ˜!ÕøôM ó 	Ø�v‰v�a‰yÔ:Ü<Ü<ð>ó >ô !–àûð	ú÷6 �Zús*    H, ÅA*I-È,
I*È6(I%É$I%É%I*É-
I;c                 ó°   •  [        U5      nUS;  a  [	        S5      eSU-  $ ! [         a(  nUR                  S   [        :X  a  [	        S5      ee S nAff = f)Nr   z&Extension name not formatted correctly)ÚgPCMachineExtensionNamesÚgPCUserExtensionNameszExtension attribute incorrectz{%s})r   r   rP   r   rh   )r@   Úext_nameÚext_attrÚext_name_guidrR   s        rI   Ú!__validate_extension_registrationÚ7RegistryGroupPolicies.__validate_extension_registrationÐ   sh   € ð	Ü  ›NˆMð
 ð 5ó 5äÐ=Ó>Ð>Ø˜Ñ%Ð%øô ó 	Ø�v‰v�a‰yÔ7Ó7Ü!Ð"JÓKÐKØûð	ús   ‚# £
A­#AÁAc                 ó   • U R                  X5      nU R                  R                  U R                  [        R
                  U/S9n[        U5      S:X  d  X#S   ;  a  SnO[        US   U   S   5      nX;  a  SUR                  S5      -   U-   S-   nOg [        R                  " 5       nU R                  Ul
        [        R                  " U[        R                  U5      US'   U R                  R                  U5        g )Nr&   r   z[]éÿÿÿÿÚ[Ú]r˜   )Ú7_RegistryGroupPolicies__validate_extension_registrationr+   r7   r1   r8   r9   rŠ   r   Ústripr¤   r¥   r¦   r§   r¨   ©r@   r·   r¸   ÚresÚ	ext_namesr±   s         rI   Úregister_extension_nameÚ-RegistryGroupPolicies.register_extension_nameÜ   sÜ   € Ø×9Ñ9¸(ÓMˆØ�j‰j×Ñ T§^¡^¼3¿>¹>Ø'/ jð  ð 2ˆäˆs‹8�q‹=˜H°©FÓ2Ø‰Iä" 3 q¡6¨(Ñ#3°BÑ#7Ó8ˆIØÓ$Ø˜iŸo™o¨dÓ3Ñ3°hÑ>ÀÑD‰Iàä�KŠK‹MˆØ�~‰~ˆŒÜ×+Ò+¨I´s×7KÑ7KØ,4ó6ˆˆ+‰à�
‰
×Ñ˜!ÕrL   c                 óì  • U R                  X5      nU R                  R                  U R                  [        R
                  U/S9n[        U5      S:X  d  X#S   ;  a  g [        US   U   S   5      nX;   a  UR                  US5      nOg [        R                  " 5       nU R                  Ul
        [        R                  " U[        R                  U5      US'   U R                  R                  U5        g )Nr&   r   r½   r–   r˜   )rÀ   r+   r7   r1   r8   r9   rŠ   r   Úreplacer¤   r¥   r¦   r§   r¨   rÂ   s         rI   Úunregister_extension_nameÚ/RegistryGroupPolicies.unregister_extension_nameï   sÏ   € Ø×9Ñ9¸(ÓMˆØ�j‰j×Ñ T§^¡^¼3¿>¹>Ø'/ jð  ð 2ˆäˆs‹8�q‹=˜H°©FÓ2Øä" 3 q¡6¨(Ñ#3°BÑ#7Ó8ˆIØÓ Ø!×)Ñ)¨(°BÓ7‰Iàä�KŠK‹MˆØ�~‰~ˆŒÜ×+Ò+¨I´s×7KÑ7KØ,4ó6ˆˆ+‰à�
‰
×Ñ˜!ÕrL   c                 óN  • U R                  USS9  U R                  U R                  S-  5      nU R                  U R                  S-  5      nSnSnU HV  nUS   R                  5       nUS:X  d  US:X  a  SnU R	                  X65        US	:X  d  US:X  d  MC  SnU R	                  X&5        MX     U(       a-  U R                  U R                  S-  U R                  S-  U5        U(       a-  U R                  U R                  S-  U R                  S-  U5        U R                  XE5        g
)ab  remove_s
json_input: JSON list of entries to remove from GPO

Example json_input:
[
    {
        "keyname": "Software\Policies\Mozilla\Firefox\Homepage",
        "valuename": "StartPage",
        "class": "USER",
    },
    {
        "keyname": "Software\Policies\Mozilla\Firefox\Homepage",
        "valuename": "URL",
        "class": "USER",
    },
]
T)rm   ÚUserÚMachineFre   ÚmachineÚbothÚuserN)Ú%_RegistryGroupPolicies__validate_jsonÚ)_RegistryGroupPolicies__load_registry_polr0   r.   Ú"_RegistryGroupPolicies__pol_removeÚ)_RegistryGroupPolicies__save_registry_polr/   r²   ©r@   rl   Úuser_pol_dataÚmachine_pol_datar©   rª   rn   Úclss           rI   Úremove_sÚRegistryGroupPolicies.remove_s  s  € ð$ 	×Ñ˜Z°ÐÑ5Ø×0Ñ0°·±ÀÑ1GÓHˆØ×3Ñ3°D·M±MÀIÑ4MÓNÐàˆØˆÛˆEØ˜‘.×&Ñ&Ó(ˆCØ�iÓ 3¨&£=Ø"&�Ø×!Ñ!Ð"2Ô:Ø�f‹}  v¥Ø#�Ø×!Ñ! -Ö7ñ  ö Ø×$Ñ$ T§\¡\°FÑ%:Ø%)§]¡]°VÑ%;Ø%2ô4ö Ø×$Ñ$ T§\¡\°IÑ%=Ø%)§]¡]°YÑ%>Ø%5ô7ð 	×Ñ˜Õ=rL   c                 óP  • U R                  U5        U R                  U R                  S-  5      nU R                  U R                  S-  5      nSnSnU HV  nUS   R                  5       nUS:X  d  US:X  a  SnU R	                  X65        US:X  d  US:X  d  MC  SnU R	                  X&5        MX     U(       a-  U R                  U R                  S-  U R                  S-  U5        U(       a-  U R                  U R                  S-  U R                  S-  U5        U R                  XE5        g	)
aÌ  merge_s
json_input: JSON list of entries to merge into GPO

Example json_input:
[
    {
        "keyname": "Software\Policies\Mozilla\Firefox\Homepage",
        "valuename": "StartPage",
        "class": "USER",
        "type": "REG_SZ",
        "data": "homepage"
    },
    {
        "keyname": "Software\Policies\Mozilla\Firefox\Homepage",
        "valuename": "URL",
        "class": "USER",
        "type": "REG_SZ",
        "data": "google.com"
    },
]
rÌ   rÍ   Fre   rÎ   rÏ   TrÐ   N)rÑ   rÒ   r0   r.   Ú#_RegistryGroupPolicies__pol_replacerÔ   r/   r²   rÕ   s           rI   Úmerge_sÚRegistryGroupPolicies.merge_s,  s  € ð, 	×Ñ˜ZÔ(Ø×0Ñ0°·±ÀÑ1GÓHˆØ×3Ñ3°D·M±MÀIÑ4MÓNÐàˆØˆÛˆEØ˜‘.×&Ñ&Ó(ˆCØ�iÓ 3¨&£=Ø"&�Ø×"Ñ"Ð#3Ô;Ø�f‹}  v¥Ø#�Ø×"Ñ" =Ö8ñ  ö Ø×$Ñ$ T§\¡\°FÑ%:Ø%)§]¡]°VÑ%;Ø%2ô4ö Ø×$Ñ$ T§\¡\°IÑ%=Ø%)§]¡]°YÑ%>Ø%5ô7ð 	×Ñ˜Õ=rL   c                 ó,  • U R                  U5        [        R                  " 5       n[        R                  " 5       nSnSnU HV  nUS   R                  5       nUS:X  d  US:X  a  SnU R	                  X65        US:X  d  US:X  d  MC  SnU R	                  X&5        MX     U(       a-  U R                  U R                  S-  U R                  S-  U5        U(       a-  U R                  U R                  S-  U R                  S-  U5        U R                  XE5        g	)
a¢  replace_s
json_input: JSON list of entries to replace entries in GPO

Example json_input:
[
    {
        "keyname": "Software\Policies\Mozilla\Firefox\Homepage",
        "valuename": "StartPage",
        "class": "USER",
        "data": "homepage"
    },
    {
        "keyname": "Software\Policies\Mozilla\Firefox\Homepage",
        "valuename": "URL",
        "class": "USER",
        "data": "google.com"
    },
]
Fre   rÎ   rÏ   TrÐ   rÌ   rÍ   N)	rÑ   r   rN   r.   rÜ   rÔ   r/   r0   r²   rÕ   s           rI   Ú	replace_sÚRegistryGroupPolicies.replace_sZ  sû   € ð( 	×Ñ˜ZÔ(ÜŸ	š	›ˆÜŸ9š9›;ÐàˆØˆÛˆEØ˜‘.×&Ñ&Ó(ˆCØ�iÓ 3¨&£=Ø"&�Ø×"Ñ"Ð#3Ô;Ø�f‹}  v¥Ø#�Ø×"Ñ" =Ö8ñ  ö Ø×$Ñ$ T§\¡\°FÑ%:Ø%)§]¡]°VÑ%;Ø%2ô4ö Ø×$Ñ$ T§\¡\°IÑ%=Ø%)§]¡]°YÑ%>Ø%5ô7ð 	×Ñ˜Õ=rL   )	r3   r$   r?   r*   r#   r/   r0   r1   r+   rV   )F)FF)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rJ   rÒ   r_   rÔ   rÑ   rˆ   r‡   rÜ   rÓ   r²   rÀ   rÅ   rÉ   rÙ   rÝ   rà   Ú__static_attributes__© rL   rI   r   r   1   sY   † ô EòD
ò1ò
@ô
Bò;ò	ò0ò",ô,ò\
&òò&ò&(>òT,>õ\*>rL   r   )(Úior   r8   Ú	samba.ndrr   r   Úsamba.dcerpcr   Úsamba.netcmd.commonr   Úsamba.netcmd.gpcommonr   r	   r
   Úsambar   Únumbersr   Úsamba.registryr   Úsamba.ntstatusr   r   r   r   Úsamba.gp_parse.gp_inir   Úsamba.commonr   r   Úsamba.ntaclsr   Úsamba.dcerpc.miscr   r   r   r   r™   Úobjectr   rç   rL   rI   Ú<module>rö      sa   ðõ$ Û 
ß *Ý Ý -÷ñ õ
  Ý Ý &÷ó õ /Ý #Ý !Ý $ß DÓ Dðð 
ôS>˜Fõ S>rL   