+
    4Ssi^                     :   R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t
 ^ RIHtHtHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ]P8                  ]P:                  ,          ]P<                  ,          ]P>                  ,          t ]PB                  ]PD                  ,          ]PF                  ,          ]PH                  ,          t% ! R R]&4      t'R t(R t)RR lt*RR lt+R t,RR lt- ! R R4      t. ! R R4      t/R t0R t1R t2R t3R t4R# )zNT Acls.N)param)securityxattridmap)ndr_pack
ndr_unpack)smbd)libsmb_samba_internal)get_samba_logger)NTSTATUSError)system_session_unix)safe_tarfilec                       ] tR t^3tRtRtR# )XattrBackendErrorzA generic xattr backend error. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       ./usr/lib/python3/dist-packages/samba/ntacls.pyr   r   3   s    (r   r   c                   Vfo   V P                  R4      pVe"   \        P                  V P                  R4      3# V P                  R4      pVe"   \        P                  V P                  R4      3# R# VR8X  d   R# VR8X  ds   Ve   \        P                  V3# \        P                  \        P
                  P                  \        P
                  P                  V P                  R4      R4      4      3# VR8X  dw   Ve   \        P                  V3# V P                  R4      p\        P
                  P                  \        P
                  P                  VR	4      4      p\        P                  V3# \        R
V,          4      h)z$return the path to the eadb, or Nonezxattr_tdb:filez
posix:eadbnativeeadbzprivate dirzeadb.tdbtdbzstate directoryz	xattr.tdbzInvalid xattr backend choice %sNN)	getsamba	xattr_tdb
posix_eadbospathabspathjoinr   )lpbackendeadbfiler    r!   	state_dirdb_paths   &&&    r   checkset_backendr+   7   s:   FF+,	 OORVV,<%=>>VVL)
!$$bff\&:;;	H		F	$$h//$$bggoobggll266-CXZd6e&fgg	E	OOX..01Iggoobggll9k&JKGOOW-- AG KLLr   c                      \         P                  P                  V\        P                  4      p\        \        P                  T4      #   \
         d     R # i ; iN)r   xattr_nativewrap_getxattrr   XATTR_DOSATTRIB_NAME_S3	Exceptionr   	DOSATTRIB)r&   file	attributes   && r   
getdosinfor5   S   sP    &&44T5:5R5RT	
 eooy11  s   .A
 
AAc                    V'       Ed   \        WV4      w  rxVe#    VP                  W\        P                  4      p	M.\        P                  P                  V\        P                  4      p	\        \        P                  V	4      p
V
P                  ^8X  d   V
P                  # V
P                  ^8X  d   V
P                  P                  # V
P                  ^8X  d   V
P                  P                  # V
P                  ^8X  d   V
P                  P                  # R # \        P                  ! V\        VVR7      #   \         dE    \        RT,          4       \        P                  P                  T\        P                  4      p	 ELi ; i)NFail to open %sservice)r+   r/   r   XATTR_NTACL_NAMEr1   printr   r.   r   NTACLversioninfosdr   
get_nt_aclSECURITY_SECINFO_FLAGS)r&   r3   session_infor'   r(   direct_db_accessr9   backend_objdbnamer4   ntacls   &&&&&&&    r   getntaclrG   ]   sA     0h GU'55f6;6L6LN	 **889>9O9OQI5;;	2==A::]]a::== ]]a::== ]]a::==    t5+'.0 	0'  U '&01!..<<T=B=S=SU		Us    D8 8AFFc                   \        V\        4      '       g#   \        V\        P                  4      '       g   Q h\        V\        4      '       d   \        P                  ! V4      pM-\        V\        P                  4      '       d   Tp\        V4      p\        V\        4      '       g#   \        V\        P                  4      '       g   Q h\        V\        4      '       d"   \        P                  P                  VX4      pM3\        V\        P                  4      '       d   TpVP                  X4      pV'       Eg   V'       Ed   V	P                  XP                  4      w  rV\        P                  8w  Edi   V\        P                  8w  EdS   VP                  \        P                  ! RV\        P                  3,          4      8X  d   \        P                  ! RV\        P                  3,          4      pV	P                  V4      w  ppV\        P                  8X  g   V\        P                  8X  d,   TpVVn        \        P                  ! V\         VVV
R7       RpM\#        RVVV3,          4      h\$        P&                  ! V^ ^ 4       \        P                  ! V\        P(                  \        P*                  ,          \        P,                  ,          VVV
R7       V'       d   \/        WV4      w  pp\0        P2                  ! 4       p^Vn        XVn        Ve/    VP9                  VV\0        P:                  \=        V4      4       R# \B        PD                  P9                  V\0        P:                  \=        V4      4       R# \        P                  ! V\         XWR7       R#   \>         dO    \A        RT,          4       \B        PD                  P9                  T\0        P:                  \=        T4      4        R# i ; i)a  
A wrapper for smbd set_nt_acl api.

Args:
    lp (LoadParam): load param from conf
    file (str): a path to file or dir
    sddl (str): ntacl sddl string
    service (str): name of share service, e.g.: sysvol
    session_info (auth_session_info): session info for authentication

Note:
    Get `session_info` with `samba.auth.user_session`, do not use the
    `admin_session` api.

Returns:
    None
z%s-%dr8   TzDUnable to find UID for domain administrator %s, got id %d of type %dNr7   )r9   rB   )#
isinstancestrr   dom_sid
descriptor	from_sddlas_sddl	sid_to_id	owner_sidr   ID_TYPE_UIDID_TYPE_BOTHDOMAIN_RID_ADMINSDOMAIN_RID_ADMINISTRATORr   
set_nt_aclrA   r   r"   chownSECINFO_GROUPSECINFO_DACLSECINFO_SACLr+   r   r<   r=   r>   wrap_setxattrr:   r   r1   r;   r   r.   )r&   r3   sddldomsidrB   r'   r(   	use_ntvfsskip_invalid_chownpassdbr9   sidr?   owner_id
owner_typeadministratoradmin_id
admin_typesd2rD   rE   rF   s   &&&&&&&&&&&           r   setntaclrg      s)   , fc""j9I9I&J&JKJ&#v&	FH,,	-	-SdC  JtX5H5H$I$IJI$  **45	D(--	.	.zz#9++!'!1!1",,!?5,,,:ASAS3S ||x//68C]C]:^0^__ ( 0 0FHDeDe;f1f g)/)9)9-)H&:  5#4#44*HZHZ:Z C$1CMOO4c$ ') !%I+,r  wD  FN  PZ  v[  -[  \  \ q!$**))*))*  #%  0h Gf
B))&*.0F0FQVY ,,T53I3I-5e_> 	("	8  B '&01""00u7M7M19%B	Bs   !+N( (AP Pc                   ^p^p^p^p^p^ p^@p^pRp	^p
^p^p^p^p^p^p^p^p^ p^ p^@p^pRpRpRpRpRpRpRpV V,          pW,          '       d;   W,          '       d-   VVV,          V,          V,          V
,          V,          ,          pW,          '       d4   VVV,          V,          V,          V,          V,          V,          ,          pW,          '       d   VW,          ,          pW,          '       d
   VV,          pV# )zMTakes the access mask of a DS ACE and transform them in a File ACE mask.
       i   i   i   i   i   i   r   )ldmRIGHT_DS_CREATE_CHILDRIGHT_DS_DELETE_CHILDRIGHT_DS_LIST_CONTENTSACTRL_DS_SELFRIGHT_DS_READ_PROPERTYRIGHT_DS_WRITE_PROPERTYRIGHT_DS_DELETE_TREERIGHT_DS_LIST_OBJECTRIGHT_DS_CONTROL_ACCESSFILE_READ_DATAFILE_LIST_DIRECTORYFILE_WRITE_DATAFILE_ADD_FILEFILE_APPEND_DATAFILE_ADD_SUBDIRECTORYFILE_CREATE_PIPE_INSTANCEFILE_READ_EAFILE_WRITE_EAFILE_EXECUTEFILE_TRAVERSEFILE_DELETE_CHILDFILE_READ_ATTRIBUTESFILE_WRITE_ATTRIBUTESDELETEREAD_CONTROL	WRITE_DACWRITE_OWNERSYNCHRONIZESTANDARD_RIGHTS_ALLfilemasks   &                              r   ldapmask2filemaskr      sn    !+ * * *M * * * * * &N & &O &M & & & &L &M &L &M & & & *F *L *I *K *K *((H$$3+G+G{-@@3 46B C- .0< = > $${_</ 02? @4 57D E  5 5 6
 ""4DE
""//Or   c                   \         P                  P                  W4      p\         P                  ! 4       pVP                  Vn        VP                  Vn        VP
                  Vn        VP                  Vn        \         P                  \         P                  .pVP                  P                   F  pVP
                  V9   g   K  \        VP                  4      \         P                  8X  d   K@  VP                  \         P                  ,          \         P                   ,          Vn        \        VP                  4      \         P"                  8X  d'   VP                  \         P$                  ,          Vn        \'        VP(                  4      Vn        VP+                  V4       K  	  V'       g   V# VP-                  V4      # )z

This function takes an the SDDL representation of a DS
ACL and return the SDDL representation of this ACL adapted
for files. It's used for Policy object provision
)r   rL   rM   rP   	group_sidtyperevisionSEC_ACE_TYPE_ACCESS_ALLOWEDSEC_ACE_TYPE_ACCESS_DENIEDdaclacesrJ   trusteeSID_BUILTIN_PREW2KflagsSEC_ACE_FLAG_OBJECT_INHERITSEC_ACE_FLAG_CONTAINER_INHERITSID_CREATOR_OWNERSEC_ACE_FLAG_INHERIT_ONLYr   access_maskdacl_addrN   )dssddlr`   rN   reffdescrallowed_ace_typesaces   &&&    r   dsacl2fsaclr   !  s5    


'
'
4C  "F}}F}}F((FKllFO 	,,++
 xx}}xx,, s{{x:::II D DDxGnGnn	s{{x999		H$F$FFCI+COO< " >>#r   c                   ~   a  ] tR tRt o RtR tRR ltRR ltRR ltR t	R	 t
R
 tRR ltRR ltRR ltR tRtV tR# )	SMBHelperiO  zV
A wrapper class for SMB connection

smb_path: path with separator "\" other than "/"
c                    Wn         W n        R # r-   )smb_connrK   )selfr   rK   s   &&&r   __init__SMBHelper.__init__V  s     r   Nc                    R V9  g   Q hV P                   P                  VVVR7      pV'       d   VP                  V P                  4      # T# )/sinfor   )r   get_aclrN   rK   )r   smb_pathrN   r   r   ntacl_sds   &&&&& r   r   SMBHelper.get_aclZ  sP    ("""==((/45@ ) B 29x-FhFr   c                   R V9  g   Q h\        V\        4      '       g#   \        V\        P                  4      '       g   Q h\        V\        4      '       d+   \        P                  P	                  W P
                  4      pM"\        V\        P                  4      '       d   TpV P                  P                  VXVVR7       R# )r   r   N)rI   rJ   r   rL   rM   
domain_sidr   set_acl)r   r   r   r   r   tmp_descs   &&&&& r   r   SMBHelper.set_acld  s    ("""(C((JxATAT,U,UVUh$$**44XOH("5"566Hh$)*5 	 	7r   c                V    RV9  g   Q hV P                   P                  V\        R7      # )z=
List file and dir base names in smb_path without recursive.
r   )attribs)r   listSMB_FILE_ATTRIBUTE_FLAGSr   r   s   &&r   r   SMBHelper.listr  s-     ("""}}!!(4L!MMr   c                B    \        V\        P                  ,          4      # )zM
Check whether the attrib value is a directory.

attrib is from list method.
)boollibsmbFILE_ATTRIBUTE_DIRECTORY)r   attribs   &&r   is_dirSMBHelper.is_diry  s     FV<<<==r   c                6    V'       d   VR,           V,           # T# )z
Join path with '\'
\r   )r   rootnames   &&&r   r%   SMBHelper.join  s     &*td{T!3t3r   c                J    R V9  g   Q hV P                   P                  V4      # )r   )r   loadfiler   s   &&r   r   SMBHelper.loadfile  s%    ("""}}%%h//r   c                \   VP                  4        F  w  r4V P                  W#4      p\        V\        4      '       dQ   V P                  P                  V4      '       g   V P                  P                  V4       V P                  WER7       K|  V P                  P                  WT4       K  	  R# )z!
Create files as defined in tree
r   N)	itemsr%   rI   dictr   chkpathmkdircreate_treesavefile)r   treer   r   contentfullnames   &&&   r   r   SMBHelper.create_tree  s{     "ZZ\MDyy0H'4((}},,X66MM''1   <&&x9 *r   c                    / pV P                  V4       Fd  pVR,          pV P                  W4      pV P                  VR,          4      '       d   V P                  VR7      W$&   KQ  V P	                  V4      W$&   Kf  	  V# )a1  
Get the tree structure via smb conn

self.smb_conn.list example:

[
  {
    'attrib': 16,
    'mtime': 1528848309,
    'name': 'dir1',
    'short_name': 'dir1',
    'size': 0L
  }, {
    'attrib': 32,
    'mtime': 1528848309,
    'name': 'file0.txt',
    'short_name': 'file0.txt',
    'size': 10L
  }
]
r   r   r   )r   r%   r   get_treer   )r   r   r   itemr   r   s   &&    r   r   SMBHelper.get_tree  so    , IIh'D<Dyy0H{{4>**!]]H]=
!]]84
 ( r   c                L   / pV P                  V4       F  pVR,          pV P                  W4      pV P                  VR,          4      '       d$   VP                  V P	                  VR7      4       K^  V P                  V4      pVP                  V P                  4      W%&   K  	  V# )z.
Get ntacl for each file and dir via smb conn
r   r   r   )r   r%   r   update
get_ntaclsr   rN   rK   )r   r   ntaclsr   r   r   r   s   &&     r   r   SMBHelper.get_ntacls  s     IIh'D<Dyy0H{{4>**dooxo@A<<1#+#3#3DLL#A  ( r   c                    V P                  4        Fb  pVR ,          pV P                  VR,          4      '       d   V P                  P                  V4       KG  V P                  P	                  V4       Kd  	  R# )r   r   N)r   r   r   deltreeunlink)r   r   r   s   &  r   delete_treeSMBHelper.delete_tree  sR    IIKD<D{{4>**%%d+$$T*  r   )rK   r   )FNNr   ) )r   r   r   r   r   r   r   r   r   r   r%   r   r   r   r   r   r   __classdictcell____classdict__s   @r   r   r   O  sI     G7N>40:@+ +r   r   c                   6   a  ] tR tRt o R tRR ltR tRtV tR# )NtaclsHelperi  c                    Wn         W0n        \        P                  ! 4       V n        V P                  P                  V4       R V P                  P                  R4      9   V n        R# )smbzserver servicesN)r9   rK   s3paramget_contextr&   loadr   r]   )r   r9   smb_conf_pathrK   s   &&&&r   r   NtaclsHelper.__init__  sH     %%']#$''++.?"@@r   Nc                    Vf   V P                   p\        V P                  WVV P                  R7      pV'       d   VP	                  V P
                  4      # T# )N)rC   r9   )r]   rG   r&   r9   rN   rK   )r   r#   rB   rN   rC   r   s   &&&&& r   rG   NtaclsHelper.getntacl  sM    ##~~GGT-LL"
 29x-FhFr   c           	     ^    \        V P                  WV P                  VV P                  R 7      # ))r]   )rg   r&   rK   r]   )r   r#   r   rB   s   &&&&r   rg   NtaclsHelper.setntacl  s&    |"&..2 	2r   )rK   r&   r9   r]   )FN)	r   r   r   r   r   rG   rg   r   r   r   s   @r   r   r     s     A	G2 2r   r   c                     \        V R ,           R4      ;_uu_ 4       pVP                  V4       RRR4       R#   + '       g   i     R# ; i).NTACLwN)openwrite)dstntacl_sddl_strfs   && r   _create_ntacl_filer     s0    	cHnc	"	"a	 
#	"	"	"s	   8A		c                     V R ,           p\         P                  P                  V4      '       g   R# \        VR4      ;_uu_ 4       pVP	                  4       uuRRR4       #   + '       g   i     R# ; i)r   Nr)r"   r#   existsr   read)src
ntacl_filer   s   &  r   _read_ntacl_filer    sH    xJ77>>*%%	j#		!vvx 
			s   A  A1	c           	     d   \        4       p\        V\        4      '       d   \        P                  ! V4      p\        W4      pRp\        P                  ! 4       pV.pV.pV'       Ed1   VP                  4       p	VP                  4       p
VP                  V	R7       F  pVP                  WR,          4      p\        P                  P                  WR,          4      pVP                  VR,          4      '       d:   VP                  V4       VP                  V4       \        P                  ! V4       M?VP!                  V4      p\#        VR4      ;_uu_ 4       pVP%                  V4       RRR4        VP'                  VRR7      p\)        VV4       K  	  EK9  \2        P"                  ! VRR7      ;_uu_ 4       p\        P4                  ! V4       F6  p\        P                  P                  VV4      pVP7                  VVR7       K8  	  RRR4       \8        P:                  ! V4       R#   + '       g   i     L; i  \*         dV   pTP-                  R	T: R
TP.                  ^,          : 24       TP1                  RT,          R,           4        Rp?EK  Rp?ii ; i  + '       g   i     L; i)aF  
Backup all files and dirs with ntacl for the service behind smb_conn.

1. Create a temp dir as container dir
2. Backup all files with dir structure into container dir
3. Generate file.NTACL files for each file and dir in container dir
4. Create a tar file from container dir(without top level folder)
5. Delete container dir
r   r   r   r   wbNTrN   zFailed to get the ntacl for z: z!The permissions for %s may not bez restored correctlyw:gzr   modearcname)r
   rI   rJ   r   rK   r   tempfilemkdtemppopr   r%   r"   r#   r   appendr   r   r   r   r   r   r   errorargswarningtarfilelistdiraddshutilrmtree)r   dest_tarfile_pathrK   logger
smb_helper	remotedirlocaldirr_dirsl_dirsr_dirl_direr_namel_namedatar   r   tarr   r#   s   &&&                 r   backup_onliner'    s    F'3""7+8-JI!H[FZF
&



%0A__UfI6FWW\\%63F  8--f%f% !**62&$''1GGDM (6!+!3!3FD!3!I"6>:! 1. 
,6	:	:cJJx(D77<<$/DGGD$G' ) 
;
 MM(% (' ! 6$affQi1 2BVK4 5 6 66 
;	:s2   H)2H<8AJ)H9<JA	JJJ/	c                   V P                  R4      P                  R^4      R,          p\        P                  ! 4       p\	        4       p\        WBV4      p\        P                  ! V 4       EF  w  rp
\        P                  P                  WR7      p\        P                  P                  W[4      pV	 Fw  p\        P                  P                  W4      p\        P                  P                  W4      p\        P                  ! WV4       VP                  WRR7      p\        VV4       Ky  	  V
 F  p\        P                  P                  VV4      p\        P                  P                  VV4      p\        P                  ! WV4       VP                  WRR7      p\        VV4       \!        VR4      ;_uu_ 4       pVP#                  4       p\!        VR4      ;_uu_ 4       pVP%                  V4       RRR4       RRR4       K  	  EK  	  \&        P                   ! VRR	7      ;_uu_ 4       p\        P(                  ! V4       F6  p\        P                  P                  VV4      pVP+                  VVR
7       K8  	  RRR4       \,        P.                  ! V4       R#   + '       g   i     L; i  + '       g   i     EK  ; i  + '       g   i     LP; i)z4
Backup files and ntacls to a tarfile for a service
r   startTr  rbr  Nr  r	  r  )rstriprsplitr  r  r   r   r"   walkr#   relpathr%   r   r   rG   r   create_filer   r  r   r  r  r  r  r  )src_service_pathr  r   rK   r9   tempdirrB   ntacls_helperdirpathdirnames	filenamesrel_dirpathdst_dirpathdirnamer  r   r   filenamesrc_filer%  dst_filer&  r   r#   s   &&&&                    r   backup_offliner>  8  s    %%c*11#q9"=G G&(L AM(*0@(A$9ggoogoFggll78  G'',,w0C'',,{4CJJs'2*33Ct3TNsN3   "H'',,w1C'',,{H5CS8*33Ct3TNsN3 c4H}}#t__NN4( % ! " )B< 
,6	:	:cJJw'D77<<.DGGD$G' ( 
;
 MM' %_ ! 
;	:s1   <%J0	!J3J0	,AKJ-(J0	0KK	c                j   \        4       pVP                  R4      P                  R^4      R,          p\        P                  ! 4       pVP                  4       p\        P                  ! V4      p\        WSV4      p	\        4       p
\        P                  ! V 4      ;_uu_ 4       pVP                  VR7       RRR4       \        P                  ! V4       EF  w  rp\        P                  P!                  WR7      p\        P                  P#                  \        P                  P%                  W4      4      pV F  pVP'                  R4      '       d   K  \        P                  P%                  VV4      p\        P                  P%                  VV4      p\        P                  P)                  V4      '       g   \*        P,                  ! VW4       \/        V4      pV'       d   V	P1                  VVV
4       K  VP3                  RV,          R,           4       K  	  V EF:  pVP'                  R4      '       d   K  \        P                  P%                  VV4      p\        P                  P%                  VV4      p\        P                  P5                  V4      '       g   \*        P6                  ! VW4       \/        V4      pV'       d   V	P1                  VVV
4       MVP3                  RV,          R,           4       \        VR	4      ;_uu_ 4       pVP9                  4       p\        VR
4      ;_uu_ 4       pVP;                  V4       RRR4       RRR4       EK=  	  EK  	  \<        P>                  ! V4       R#   + '       g   i     EL; i  + '       g   i     LN; i  + '       g   i     EK  ; i)z6
Restore files and ntacls from a tarfile to a service
r   )r#   Nr)  r   z)Failed to restore ntacl for directory %s.z) Please check the permissions are correctz$Failed to restore ntacl for file %s.r+  r  r,  ) r
   r-  r.  r  r  get_domain_sidr   rK   r   r   r  r   
extractallr"   r/  r#   r0  normpathr%   endswithisdirr   r   r  rg   r  isfiler1  r  r   r  r  )src_tarfile_pathdst_service_path
samdb_connr   r  r9   r3  dom_sid_strrK   r4  rB   r   r5  r6  r7  r8  r9  r:  r  r   r   r;  r<  r%  r=  s   &&&&                     r   backup_restorerJ  h  s    F%%c*11#q9"=G G++-K{+G AM&(L	&	'	'1	'" 
( )+(8$9ggoogo=gg&&GGLL)79  G##H--ggll7G4ggll;8ww}}S))JJsL:!1#!6!!**3MNNCcIEFG    "H$$X..ggll7H5ggll;9ww~~c**$$S,@!1#!6!!**3MNN#IC#O#N$O P #t__#==?Dc4H t, ) %_! "+ )9T MM'] 
(	'	'V ) %__s0   "M9%N 	5NN 	9N
	NN 	 N2)NNTN)NNTFNN)T)5r   r"   r  r  samba.xattr_nativer   samba.xattr_tdbsamba.posix_eadbsamba.samba3r   r   samba.dcerpcr   r   r   	samba.ndrr   r   r   r	   r   samba.loggerr
   r   samba.auth_utilr   r   r  FILE_ATTRIBUTE_SYSTEMr   FILE_ATTRIBUTE_ARCHIVEFILE_ATTRIBUTE_HIDDENr   SECINFO_OWNERrW   rX   rY   rA   r1   r   r+   r5   rG   rg   r   r   r   r   r   r  r'  r>  rJ  r   r   r   <module>rW     s  $  
      ) / / *  8 )  / ) "77!::;!889 "778  "//!//0!../ "../ 
)	 )M82#0Ld8N4n+\~+ ~+B2 2: 
9x-`<r   