+
    4Ssi:                         ^ RI Ht ^ RIt^ RIHtHt ^ RIHt ^ RIH	t	 ^ RI
HtHtHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHtHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI H!t!H"t"H#t#H$t$ Rt% ! R R]&4      t'R# )    )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                      a  ] tR t^1t o RR ltR tR tR tRR ltR t	R t
R	 tR
 tRR ltR tR tR tR tR tR tRtV tR# )RegistryGroupPoliciesNc                   Wn         W n        W0n        W@n        V P                  P	                  R 4      pRP                  VP                  4       RVR.4      V n        RP                  V P                  R.4      V n        \        V P                  V P                   4      V n
        V'       d"   VP                  R4      '       d   VR,          pM \        V P                  V P                  4      p\        VRV P                  V P                  R7      V n        \        P                   \        P"                  ,          \        P$                  ,          pV P                  P'                  V P                  \(        P*                  R	.R
7      ^ ,          p	V	R	,          ^ ,          p
\-        \        P.                  V
4      P1                  4       p\        P2                  ! V P                  P5                  4       4      p\7        WRR7      V n        R# )realm\Policiesz%szRegistry.polzldap://:   NNsysvol)lpcredsnTSecurityDescriptorbasescopeattrsF)as_sddlN)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   
descriptorr)   dom_sidget_domain_sidr   fs_sd)selfr*   r"   r#   r+   hostr   dc_hostnameds_sd_flagsmsg	ds_sd_ndrds_sd
domain_sids   &&&&&&       0/usr/lib/python3/dist-packages/samba/policies.py__init__RegistryGroupPolicies.__init__2   s{   

G$yy%++-S$!GH		4<<"@A#DJJ9DOOI..r(K'<K";#+&*gg)-5	  ----.,,- jjT^^3>>'=&>   @@AC./2	8..	:BBD %%djj&?&?&AB
 EB
    c                    \        \        P                  V P                  P	                  V4      4      pV#   \
         dI   pTP                  ^ ,          \        \        \        39   d   \        P                  ! 4       p Rp?T# h Rp?ii ; i)r   N)
r   r   filer3   loadfiler   argsr   r   r   )r>   r0   pol_dataes   &&  rF   __load_registry_pol)RegistryGroupPolicies.__load_registry_polS   sv    	!$))TYY-?-?-IJH   	vvay:<<> >  99;  	s   37 B
<BBB
c                    \        V P                  V4       V P                  P                  W#4       V P                  P                  W P                  4       R # N)r   r3   savefileset_aclr=   )r>   file_dir	file_namedatas   &&&&rF   __save_file!RegistryGroupPolicies.__save_file_   s8    dii2		9+		)ZZ0rI   c                <    V P                  W\        V4      4       R # rS   )!_RegistryGroupPolicies__save_filer   )r>   r/   r0   rN   s   &&&&rF   __save_registry_pol)RegistryGroupPolicies.__save_registry_pold   s    HX,>?rI   c                8   \        V4      \        8w  d   \        R 4      hV Fo  p\        V4      \        8w  d   \        R 4      h. ROpV'       g   VP	                  RR.4       \        V Uu. uF  qUV9   NK	  	  up4      '       d   Kf  \        R 4      h	  R# u upi )zJSON not formatted correctlyrX   typeN)keyname	valuenameclass)r`   listSyntaxErrordictextendall)r>   
json_inputremoveentrykeysks   &&&   rF   __validate_json%RegistryGroupPolicies.__validate_jsong   s    
t#<==EE{d"!"@AA4DVV,-D1DqU
D122!"@AA   2s   ,B
c                    \        VR ,          \        4      '       d
   VR ,          # \        ^4       F,  p\        V4      VR ,          P	                  4       8X  g   K*  Vu # 	  \        RVR ,          ,          4      h)r`   zUnknown type %s)
isinstancer   ranger   upper	TypeError)r>   rk   is   && rF   __determine_data_type+RegistryGroupPolicies.__determine_data_types   s`    eFmV,,= 2Yq>U6]%8%8%::H  )E&M9::rI   c                J   V\         8X  d    \        V4      \        8X  d   \        V4      # V\        8X  d>   \        V4      \        8X  d*   R P                  V4      R,           pVP                  R4      # V\        8X  d&   \        V4      \        8X  d   VP                  R4      # V# ) z  z	utf-16-leutf-8)	r   r`   rd   bytesr   r-   encoder   str)r>   rtyperX   s   &&&rF   
__set_data RegistryGroupPolicies.__set_data|   sz    J4:#5;l"tDzT'9==&3D;;{++f_ds!2;;w''rI   c                <   VP                    F`  pVP                  VR ,          8X  g   K  VP                  VR,          8X  g   K7  V P                  VP                  VR,          4      Vn         R# 	  \        P                  ! 4       pVR ,          Vn        VR,          Vn        V P                  V4      Vn        V P                  VP                  VR,          4      Vn        \        VP                   4      pVP                  V4       WAn         \        V4      Vn        R# )ra   rb   rX   N)entriesra   rb    _RegistryGroupPolicies__set_datar`   rX   r   rk   +_RegistryGroupPolicies__determine_data_typerd   appendlennum_entries)r>   rN   rk   rO   r   s   &&&  rF   __pol_replace#RegistryGroupPolicies.__pol_replace   s    !!AyyE),,{{eK00v?	 " 

Ai(AI,AK//6AF__QVVU6];AF8++,GNN1&#&w<H rI   c                    . pVP                    FF  pVP                  VR ,          8X  d   VP                  VR,          8X  d   K5  VP                  V4       KH  	  W1n         \	        V4      Vn        R# )ra   rb   N)r   ra   rb   r   r   r   )r>   rN   rk   r   rO   s   &&&  rF   __pol_remove"RegistryGroupPolicies.__pol_remove   sY    !!AIIy!11KK5#55q! " #"7|rI   c           	     l   V'       g   V'       g   R # V P                   R,          p V P                  P                  V4      p\        4       pTP                  T4       ^ p^ p^ p	TP                  P                  RR4      '       dG   \        TP                  P                  RR4      P                  R4      4      pTR,          pT^,	          p	T'       d
   T^,          pT'       d
   T	^,          p	T	^,          T,           pTP                  P!                  R4      '       g   TP                  P#                  R4       TP                  P%                  RR\'        T4      4       \)        4       ;_uu_ 4       p
TP                  P+                  T
4       T
P-                  ^ 4       T P/                  T P                   R,          TT
P1                  4       P                  R4      4       R R R 4       \2        P4                  ! 4       pT P6                  Tn        \2        P:                  ! \'        T4      \2        P<                  R4      TR&   T P>                  PA                  T4       R #   \         d:   pTP                  ^ ,          \
        \        \        39   d   \        p R p?ELXh R p?ii ; i  + '       g   i     L; i)	NzGPT.INIGeneralVersionrz   i   versionNumber	new_value)!r/   r3   rL   r   rM   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_INIrX   rO   parserversionmachine_versionuser_versionout_datams   &&&         rF   increment_gpt_ini'RegistryGroupPolicies.increment_gpt_ini   s   |,,*	99%%g.D T??%%i;;&//--i.799?JG%
2O"b=Lq OAL2%8 **955OO''	2Iy#g,?ZZ8OO!!(+MM!T\\B.%]]_33G<>  KKM~~++CL#:N:N,;=+

!M  	vvay:<<> > !	6 Zs*   I 1A.J#J '-JJJ #J3	c                     \        V4      pTR9  d   \	        R4      hRT,          #   \         d.   pTP                  ^ ,          \        8X  d   \	        R4      hh Rp?ii ; i)r   z&Extension name not formatted correctlyNzExtension attribute incorrectz{%s})gPCMachineExtensionNamesgPCUserExtensionNames)r   r   rM   r   re   )r>   ext_nameext_attrext_name_guidrO   s   &&&  rF   !__validate_extension_registration7RegistryGroupPolicies.__validate_extension_registration   sh    	 NM
  5 5=>>%%  	vvay77!"JKK	s   ( A (AA c                H   V P                  W4      pV P                  P                  V P                  \        P
                  V.R 7      p\        V4      ^ 8X  g   W#^ ,          9  d   RpM \        V^ ,          V,          R,          4      pW9  d(   RVP                  R4      ,           V,           R,           pMR# \        P                  ! 4       pV P                  Vn
        \        P                  ! V\        P                  V4      VR&   V P                  P                  V4       R# )r%   z[][]Nr   )7_RegistryGroupPolicies__validate_extension_registrationr+   r7   r1   r8   r9   r   r   stripr   r   r   r   r   r>   r   r   res	ext_namesr   s   &&&   rF   register_extension_name-RegistryGroupPolicies.register_extension_name   s    99(MjjT^^3>>'/j   2s8q=HF2I"3q6(#3B#78I$iood33h>DIKKM~~++Is7K7K,46+

!rI   c                   V P                  W4      pV P                  P                  V P                  \        P
                  V.R 7      p\        V4      ^ 8X  g   W#^ ,          9  d   R# \        V^ ,          V,          R,          4      pW9   d   VP                  VR4      pMR# \        P                  ! 4       pV P                  Vn
        \        P                  ! V\        P                  V4      VR&   V P                  P                  V4       R# )r%   Nr   r   r   )r   r+   r7   r1   r8   r9   r   r   replacer   r   r   r   r   r   s   &&&   rF   unregister_extension_name/RegistryGroupPolicies.unregister_extension_name   s    99(MjjT^^3>>'/j   2s8q=HF2"3q6(#3B#78I !))(B7IKKM~~++Is7K7K,46+

!rI   c                   V P                  VRR7       V P                  V P                  R,          4      pV P                  V P                  R,          4      pRpRpV F^  pVR,          P                  4       pVR8X  g   VR8X  d   RpV P	                  W64       VR	8X  g
   VR8X  g   KK  RpV P	                  W&4       K`  	  V'       d6   V P                  V P                  R,          V P                  R,          V4       V'       d6   V P                  V P                  R,          V P                  R,          V4       V P                  WE4       R
# )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)rj   UserMachineFrc   machinebothuserN)%_RegistryGroupPolicies__validate_json)_RegistryGroupPolicies__load_registry_polr0   r.   "_RegistryGroupPolicies__pol_remove)_RegistryGroupPolicies__save_registry_polr/   r   r>   ri   user_pol_datamachine_pol_datar   r   rk   clss   &&      rF   remove_sRegistryGroupPolicies.remove_s  s   $ 	Z5001GH33DMMI4MNE.&&(Ci3&="&!!"2:f}v#!!-7   $$T\\F%:%)]]V%;%24 $$T\\I%=%)]]Y%>%57 	=rI   c                   V P                  V4       V P                  V P                  R,          4      pV P                  V P                  R,          4      pRpRpV F^  pVR,          P                  4       pVR8X  g   VR8X  d   RpV P	                  W64       VR8X  g
   VR8X  g   KK  RpV P	                  W&4       K`  	  V'       d6   V P                  V P                  R,          V P                  R,          V4       V'       d6   V P                  V P                  R,          V P                  R,          V4       V P                  WE4       R	# )
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   Frc   r   r   Tr   N)r   r   r0   r.   #_RegistryGroupPolicies__pol_replacer   r/   r   r   s   &&      rF   merge_sRegistryGroupPolicies.merge_s+  s   , 	Z(001GH33DMMI4MNE.&&(Ci3&="&""#3;f}v#""=8   $$T\\F%:%)]]V%;%24 $$T\\I%=%)]]Y%>%57 	=rI   c                b   V P                  V4       \        P                  ! 4       p\        P                  ! 4       pRpRpV F^  pVR,          P                  4       pVR8X  g   VR8X  d   RpV P	                  W64       VR8X  g
   VR8X  g   KK  RpV P	                  W&4       K`  	  V'       d6   V P                  V P                  R,          V P                  R,          V4       V'       d6   V P                  V P                  R,          V P                  R,          V4       V P                  WE4       R	# )
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"
    },
]
Frc   r   r   Tr   r   r   N)	r   r   rK   r.   r   r   r/   r0   r   r   s   &&      rF   	replace_sRegistryGroupPolicies.replace_sY  s    ( 	Z(		99;E.&&(Ci3&="&""#3;f}v#""=8   $$T\\F%:%)]]V%;%24 $$T\\I%=%)]]Y%>%57 	=rI   )	r3   r#   r=   r*   r"   r/   r0   r1   r+   rS   )F)FF)__name__
__module____qualname____firstlineno__rG   r   r\   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes____classdictcell__)__classdict__s   @rF   r   r   1   sa     CB
1
@
B;	0",,\
&&&(>T,>\*> *>rI   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    rI   rF   <module>r      sa   $  
 *  - 
    &  / # ! $ D D 
R>F R>rI   