ó
    cÛ–i	^  ã                   ó  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r
  SSKJrJrJr  SSK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  SSKJr  \R8                  \R:                  -  \R<                  -  \R>                  -  r \RB                  \RD                  -  \RF                  -  \RH                  -  r% " S S\&5      r'S r(S r)    SS jr*   SS jr+S r,SS jr- " S S5      r. " S S5      r/S r0S r1S r2S r3S r4g) 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                   ó   • \ rS rSrSrSrg)ÚXattrBackendErroré3   z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                 óì  • Uck  U R                  S5      nUb!  [        R                  U R                  S5      4$ U R                  S5      nUb!  [        R                  U R                  S5      4$ gUS:X  a  gUS:X  aq  Ub  [        R                  U4$ [        R                  [        R
                  R                  [        R
                  R                  U R                  S5      S5      5      4$ US:X  au  Ub  [        R                  U4$ U R                  S	5      n[        R
                  R                  [        R
                  R                  US
5      5      n[        R                  U4$ [        SU-  5      e)z$return the path to the eadb, or Nonezxattr_tdb:filez
posix:eadb©NNÚnativeÚeadbzprivate dirzeadb.tdbÚtdbzstate directoryz	xattr.tdbzInvalid xattr backend choice %s)	ÚgetÚsambaÚ	xattr_tdbÚ
posix_eadbÚosÚpathÚabspathÚjoinr   )ÚlpÚbackendÚeadbfiler"   r#   Ú	state_dirÚdb_paths          r   Úcheckset_backendr-   7   s4  € à�Ø—F‘FÐ+Ó,ˆ	ØÑ Ü—O‘O R§V¡VÐ,<Ó%=Ð>Ð>Ø—V‘V˜LÓ)ˆ
ØÑ!Ü×$Ñ$ b§f¡f¨\Ó&:Ð;Ð;ØØ	�HÓ	ØØ	�FÓ	ØÑÜ×$Ñ$ hÐ/Ð/ä×$Ñ$¤b§g¡g§o¡o´b·g±g·l±lÀ2Ç6Á6È-ÓCXÐZdÓ6eÓ&fÐgÐgØ	�EÓ	ØÑÜ—O‘O XÐ.Ð.àŸ™Ð0Ó1ˆIÜ—g‘g—o‘o¤b§g¡g§l¡l°9¸kÓ&JÓKˆGÜ—O‘O WÐ-Ð-äÐ AÀGÑ KÓLÐLr   c                 ó´   •  [         R                  R                  U[        R                  5      n[        [        R                  U5      $ ! [
         a     g f = f©N)r!   Úxattr_nativeÚwrap_getxattrr   ÚXATTR_DOSATTRIB_NAME_S3Ú	Exceptionr   Ú	DOSATTRIB)r(   ÚfileÚ	attributes      r   Ú
getdosinfor7   S   sP   € ðÜ×&Ñ&×4Ñ4°TÜ5:×5RÑ5RóTˆ	ô
 ”e—o‘o yÓ1Ð1øô ó Ùðús   ‚.A
 Á

AÁAc                 óö  • U(       Ga
  [        XU5      u  pxUb"   UR                  X�[        R                  5      n	O.[        R                  R                  U[        R                  5      n	[        [        R                  U	5      n
U
R                  S:X  a  U
R                  $ U
R                  S:X  a  U
R                  R                  $ U
R                  S:X  a  U
R                  R                  $ U
R                  S:X  a  U
R                  R                  $ g [        R                  " U[        UUS9$ ! [         a@    [        SU-  5        [        R                  R                  U[        R                  5      n	 GNf = f)NúFail to open %sé   é   é   é   ©Úservice)r-   r1   r   ÚXATTR_NTACL_NAMEr3   Úprintr!   r0   r   ÚNTACLÚversionÚinfoÚsdr	   Ú
get_nt_aclÚSECURITY_SECINFO_FLAGS)r(   r5   Úsession_infor)   r*   Údirect_db_accessr?   Úbackend_objÚdbnamer6   Úntacls              r   ÚgetntaclrM   ]   s>  € ÷ Ü 0°¸hÓ GÑˆØÑðUØ'×5Ñ5°fÜ6;×6LÑ6LóN‘	ô ×*Ñ*×8Ñ8¸Ü9>×9OÑ9OóQˆIäœ5Ÿ;™;¨	Ó2ˆØ�=‰=˜AÓØ—:‘:ÐØ�]‰]˜aÓØ—:‘:—=‘=Ð Ø�]‰]˜aÓØ—:‘:—=‘=Ð Ø�]‰]˜aÓØ—:‘:—=‘=Ð ð  ô �Š˜tÜ5Ø+Ø'.ñ0ð 	0øô' ó Uô Ð'¨&Ñ0Ô1Ü!×.Ñ.×<Ñ<¸TÜ=B×=SÑ=SóU“	ð	Uús   › D. Ä.AE8Å7E8c                 óš  • [        U[        5      (       d!  [        U[        R                  5      (       d   e[        U[        5      (       a  [        R                  " U5      nO,[        U[        R                  5      (       a  Un[        U5      n[        U[        5      (       d!  [        U[        R                  5      (       d   e[        U[        5      (       a!  [        R                  R                  UW5      nO2[        U[        R                  5      (       a  UnUR                  W5      nU(       Gd„  U(       Ga|  U	R                  WR                  5      u  pÞU[        R                  :w  GaJ  U[        R                  :w  Ga5  UR                  [        R                  " SU[        R                  4-  5      :X  až  [        R                  " SU[        R                  4-  5      nU	R                  U5      u  nnU[        R                  :X  d  U[        R                  :X  a(  UnUUl        [        R                  " U[         UUU
S9  SnOq[#        SUUU4-  5      e[$        R&                  " USS5        [        R                  " U[        R(                  [        R*                  -  [        R,                  -  UUU
S9  U(       a›  [/        XU5      u  nn[0        R2                  " 5       nSUl        WUl        Ub-   UR9                  UU[0        R:                  [=        U5      5        g[B        RD                  R9                  U[0        R:                  [=        U5      5        g[        R                  " U[         WX¤S	9  g! [>         aI    [A        SU-  5        [B        RD                  R9                  U[0        R:                  [=        U5      5         gf = f)
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-%dr>   TzDUnable to find UID for domain administrator %s, got id %d of type %dr   r:   Nr9   )r?   rH   )#Ú
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_aclrG   r   r$   ÚchownÚSECINFO_GROUPÚSECINFO_DACLÚSECINFO_SACLr-   r   rB   rC   rD   Úwrap_setxattrr@   r   r3   rA   r!   r0   )r(   r5   ÚsddlÚdomsidrH   r)   r*   Ú	use_ntvfsÚskip_invalid_chownÚpassdbr?   ÚsidrE   Úowner_idÚ
owner_typeÚadministratorÚadmin_idÚ
admin_typeÚsd2rJ   rK   rL   s                         r   Úsetntaclrm   ƒ   s$  € ô, �fœc×"Ñ"¤j°¼×9IÑ9I×&JÑ&JÐKÐJÜ�&œ#×ÑÜ×Ò˜vÓ&‰Ü	�FœH×,Ñ,×	-Ñ	-ØˆÜ�S“ˆä�dœC× Ñ ¤J¨t´X×5HÑ5H×$IÑ$IÐJÐIÜ�$œ×ÑÜ× Ñ ×*Ñ*¨4°Ó5‰Ü	�Dœ(×-Ñ-×	.Ñ	.ØˆØ�z‰z˜#‹ˆç×+à!'×!1Ñ!1°"·,±,Ó!?ÑˆØœ5×,Ñ,Ô,°:Ä×ASÑASÔ3Sð �|‰|œx×/Ò/°¸6Ä8×C]ÑC]Ð:^Ñ0^Ó_Ó_Ü (× 0Ò 0°¸FÄH×DeÑDeÐ;fÑ1fÓ g�Ø)/×)9Ñ)9¸-Ó)HÑ&�˜:ð  ¤5×#4Ñ#4Ó4¸*Ì×HZÑHZÓ:Zð �CØ$1�C”Mä—O’OØÔ4°cØ$Ø 'ò)ð !%‘Iä+Ð,rð  wDð  FNð  PZð  v[ñ  -[ó  \ð  \ô —’˜˜q !Ô$Ü—’ØÜ×*Ñ*Ü×)Ñ)ñ*ä×)Ñ)ñ*ð Ø Ø#ò%ö Ü 0°¸hÓ GÑˆ�fÜ—’“ˆØˆŒØˆŒ
ØÑðBØ×)Ñ)¨&Ø*.´×0FÑ0FÌÐQVËõYô ×Ñ×,Ñ,¨T´5×3IÑ3IÜ-5°e«_õ>ô 	�ŠØÔ(¨"Øó	8øô ó Bô Ð'¨&Ñ0Ô1Ü×"Ñ"×0Ñ0°´u×7MÑ7MÜ19¸%³öBð	Bús   Ë6+M7 Í7AO
Ï	O
c                 óL  • SnSnSnSnSnSnSnSnS	n	Sn
SnSnSnSnSnSnSnSnSnSnSnSnS	nS
nSnSnSnSnSnU U-  nX-  (       a  X-  (       a  UUU-  U-  U-  U
-  U-  -  nX-  (       a  UUU-  U-  U-  U-  U-  U-  -  nX-  (       a  UXý-  -  nX-  (       a  UU-  nU$ )zMTakes the access mask of a DS ACE and transform them in a File ACE mask.
    r:   r;   r=   é   é   é    é@   é€   é   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”   ê   s_  € ð !+ÐØ *ÐØ *ÐØ *€MØ *ÐØ *ÐØ *ÐØ *ÐØ *ÐØ &€NØ &ÐØ &€OØ &€MØ &ÐØ &ÐØ &ÐØ &€LØ &€MØ &€LØ &€MØ &ÐØ &ÐØ &ÐØ *€FØ *€LØ *€IØ *€KØ *€KØ *ÐàÐ(Ñ(€Hà×$¨3×+GØ˜{Ð-@Ñ@Ø3ñ 4Ø6Bñ Cà-ñ .à0<ñ =ñ >ˆð ×$Ø˜{¨_Ñ<Ø/ñ 0Ø2?ñ @à4ñ 5à7Dñ Eð  5ñ 5ñ 6ˆð
 ×"ØÐ4ÑDÑEˆà
×"ØÐ/Ñ/ˆà€Or   c                 ó–  • [         R                  R                  X5      n[         R                  " 5       nUR                  Ul        UR                  Ul        UR
                  Ul        UR                  Ul        UR                  R                  n[        S[        U5      5       GH  nXV   nUR
                  [         R                  [         R                  4;   d  M8  [        UR                  5      [         R                  :w  d  Ma  UR                   [         R"                  -  [         R$                  -  Ul        [        UR                  5      [         R&                  :X  a"  UR                   [         R(                  -  Ul        [+        UR,                  5      Ul        UR/                  U5        GM     U(       d  U$ UR1                  U5      $ )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   )r   rR   rS   rV   Ú	group_sidÚtypeÚrevisionÚdaclÚacesÚrangeÚlenÚ"SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECTÚSEC_ACE_TYPE_ACCESS_ALLOWEDrP   Ú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_addrT   )Údssddlrf   rT   ÚrefÚfdescrrš   ÚiÚaces           r   Údsacl2fsaclr­   !  s<  € ô ×
Ñ
×
'Ñ
'¨Ó
4€CÜ× Ò Ó"€FØ—}‘}€FÔØ—}‘}€FÔØ—(‘(€F„KØ—l‘l€F„OØ�8‰8�=‰=€DÜ�1”c˜$“i× ˆØ‰gˆØ�8‰8œ×CÑCÜ ×<Ñ<ð>õ >ÜBEÀcÇkÁkÓBRÔV^×VqÑVqÕBqàŸ	™	¤H×$HÑ$HÑHÌ8×KrÑKrÑrˆCŒIÜ�3—;‘;Ó¤8×#=Ñ#=Ó=àŸI™I¬×(JÑ(JÑJ�”	Ü/°·±Ó@ˆCŒOØ�O‰O˜C× ñ !ö Øˆà�>‰>˜#ÓÐr   c                   óx   • \ rS rSrSrS r  SS jr SS jrSS jrS r	S	 r
S
 rSS jrSS jrSS jrS rSrg)Ú	SMBHelperiA  zV
A wrapper class for SMB connection

smb_path: path with separator "\" other than "/"
c                 ó   • Xl         X l        g r/   )Úsmb_connrQ   )Úselfr±   rQ   s      r   Ú__init__ÚSMBHelper.__init__H  s   € Ø ŒØ�r   Nc                 ó�   • SU;  d   eU R                   R                  UUUS9nU(       a  UR                  U R                  5      $ U$ ©NÚ/)Úsinfor¦   )r±   Úget_aclrT   rQ   )r²   Úsmb_pathrT   r¸   r¦   Úntacl_sds         r   r¹   ÚSMBHelper.get_aclL  sP   € à˜(Ó"Ð"Ð"à—=‘=×(Ñ(¨Ø/4Ø5@ð )ð Bˆö 29ˆx×Ñ §¡Ó-ÐF¸hÐFr   c                 óx  • SU;  d   e[        U[        5      (       d!  [        U[        R                  5      (       d   e[        U[        5      (       a*  [        R                  R	                  X R
                  5      nO![        U[        R                  5      (       a  UnU R                  R                  UWUUS9  g r¶   )rO   rP   r   rR   rS   Ú
domain_sidr±   Úset_acl)r²   rº   r»   r¸   r¦   Útmp_descs         r   r¿   ÚSMBHelper.set_aclV  s•   € à˜(Ó"Ð"Ð"ä˜(¤C×(Ñ(¬J°xÄ×ATÑAT×,UÑ,UÐVÐUÜ�h¤×$Ñ$Ü×*Ñ*×4Ñ4°X¿¹ÓO‰HÜ˜¤(×"5Ñ"5×6Ñ6ØˆHà�‰×Ñ˜h¨Ø$)Ø*5ð 	ò 	7r   c                 óN   • SU;  d   eU R                   R                  U[        S9$ )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.listd  s-   € ð ˜(Ó"Ð"Ð"Ø�}‰}×!Ñ! (Ô4LÐ!ÐMÐMr   c                 ó:   • [        U[        R                  -  5      $ )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_dirk  s   € ô �FœV×<Ñ<Ñ<Ó=Ð=r   c                 ó$   • U(       a  US-   U-   $ U$ )z
Join path with '\'
Ú\r   )r²   ÚrootÚnames      r   r'   ÚSMBHelper.joins  s   € ö &*ˆt�d‰{˜TÑ!Ð3¨tÐ3r   c                 óH   • SU;  d   eU R                   R                  U5      $ )Nr·   )r±   ÚloadfilerÆ   s     r   rÕ   ÚSMBHelper.loadfiley  s%   € Ø˜(Ó"Ð"Ð"Ø�}‰}×%Ñ% hÓ/Ð/r   c                 óP  • UR                  5        H’  u  p4U R                  X#5      n[        U[        5      (       aL  U R                  R                  U5      (       d  U R                  R                  U5        U R                  XES9  Mw  U R                  R                  XT5        M”     g)z!
Create files as defined in tree
©rº   N)	Úitemsr'   rO   Údictr±   ÚchkpathÚmkdirÚcreate_treeÚsavefile)r²   Útreerº   rÒ   ÚcontentÚfullnames         r   rÝ   ÚSMBHelper.create_tree}  s{   € ð "ŸZ™Zž\‰MˆDØ—y‘y Ó0ˆHÜ˜'¤4×(Ñ(Ø—}‘}×,Ñ,¨X×6Ñ6Ø—M‘M×'Ñ'¨Ô1Ø× Ñ  Ð Ó<à—‘×&Ñ& xÖ9ò *r   c                 óä   • 0 nU R                  U5       HX  nUS   nU R                  X5      nU R                  US   5      (       a  U R                  US9X$'   ME  U R	                  U5      X$'   MZ     U$ )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   € ð, ˆØ—I‘I˜hÖ'ˆDØ˜‘<ˆDØ—y‘y Ó0ˆHØ�{‰{˜4 ™>×*Ñ*Ø!Ÿ]™]°H˜]Ð=�“
à!Ÿ]™]¨8Ó4�“
ñ (ð ˆr   c                 ó4  • 0 nU R                  U5       H€  nUS   nU R                  X5      nU R                  US   5      (       a   UR                  U R	                  US95        MR  U R                  U5      nUR                  U R                  5      X%'   M‚     U$ )z.
Get ntacl for each file and dir via smb conn
rÒ   rÌ   rØ   )rÄ   r'   rÍ   ÚupdateÚ
get_ntaclsr¹   rT   rQ   )r²   rº   Úntaclsrå   rÒ   rá   r»   s          r   ré   ÚSMBHelper.get_ntaclsª  s‰   € ð ˆØ—I‘I˜hÖ'ˆDØ˜‘<ˆDØ—y‘y Ó0ˆHØ�{‰{˜4 ™>×*Ñ*Ø—‘˜dŸo™o°x˜oÐ@ÖAàŸ<™<¨Ó1�Ø#+×#3Ñ#3°D·L±LÓ#A�Ó ñ (ð ˆr   c                 óÞ   • U R                  5        HY  nUS   nU R                  US   5      (       a  U R                  R                  U5        M>  U R                  R	                  U5        M[     g )NrÒ   rÌ   )rÄ   rÍ   r±   ÚdeltreeÚunlink)r²   rå   rÒ   s      r   Údelete_treeÚSMBHelper.delete_tree¹  sR   € Ø—I‘I–KˆDØ˜‘<ˆDØ�{‰{˜4 ™>×*Ñ*Ø—‘×%Ñ% dÖ+à—‘×$Ñ$ TÖ*ò  r   )rQ   r±   )FNNr   )Ú )r   r   r   r   r   r³   r¹   r¿   rÄ   rÍ   r'   rÕ   rÝ   rä   ré   rï   r   r   r   r   r¯   r¯   A  sN   † ñòð ).Ø(,ôGð )-ô7ôNò>ò4ò0ô:ôô@õ+r   r¯   c                   ó*   • \ rS rSrS rSS jrS rSrg)ÚNtaclsHelperiÂ  c                 óÌ   • Xl         X0l        [        R                  " 5       U l        U R                  R                  U5        SU R                  R                  S5      ;   U l        g )NÚsmbzserver services)r?   rQ   Ús3paramÚget_contextr(   Úloadr    rc   )r²   r?   Úsmb_conf_pathrQ   s       r   r³   ÚNtaclsHelper.__init__Ä  sH   € ØŒØŒô ×%Ò%Ó'ˆŒØ�‰�‰�]Ô#à $§'¡'§+¡+Ð.?Ó"@Ñ@ˆ�r   Nc                 ó¨   • Uc  U R                   n[        U R                  XUU R                  S9nU(       a  UR	                  U R
                  5      $ U$ )N)rI   r?   )rc   rM   r(   r?   rT   rQ   )r²   r%   rH   rT   rI   r»   s         r   rM   ÚNtaclsHelper.getntaclÎ  sM   € ØÑ#Ø#Ÿ~™~ÐäØ�G‰G�TØ-Ø—L‘Lñ"ˆö
 29ˆx×Ñ §¡Ó-ÐF¸hÐFr   c           	      óX   • [        U R                  XU R                  UU R                  S9$ )N)rc   )rm   r(   rQ   rc   )r²   r%   r»   rH   s       r   rm   ÚNtaclsHelper.setntaclÙ  s&   € ä˜Ÿ™ °·±¸|Ø"&§.¡.ñ2ð 	2r   )rQ   r(   r?   rc   )FN)r   r   r   r   r³   rM   rm   r   r   r   r   ró   ró   Â  s   † òAô	Gõ2r   ró   c                 óx   • [        U S-   S5       nUR                  U5        S S S 5        g ! , (       d  f       g = f)Nú.NTACLÚw)ÚopenÚwrite)ÚdstÚntacl_sddl_strÚfs      r   Ú_create_ntacl_filer  ß  s*   € Ü	ˆc�H‰n˜cÔ	" aØ	�‰�Ô÷ 
#×	"Ö	"ús   �+«
9c                 óÄ   • U S-   n[         R                  R                  U5      (       d  g [        US5       nUR	                  5       sS S S 5        $ ! , (       d  f       g = f)Nr   Úr)r$   r%   Úexistsr  Úread)ÚsrcÚ
ntacl_filer  s      r   Ú_read_ntacl_filer  ä  sB   € Ø�x‘€Jä�7‰7�>‰>˜*×%Ñ%Øä	ˆj˜#Ô	 !Ø�v‰v‹x÷ 
×	×	ús   ·AÁ
Ac           	      óø  • [        5       n[        U[        5      (       a  [        R                  " U5      n[        X5      nSn[        R                  " 5       nU/nU/nU(       Ga  UR                  5       n	UR                  5       n
UR                  U	S9 Hß  nUR                  X›S   5      n[        R                  R                  X«S   5      nUR                  US   5      (       a9  UR                  U5        UR                  U5        [        R                  " U5        O7UR!                  U5      n[#        US5       nUR%                  U5        SSS5         UR'                  USS9n[)        UU5        Má     U(       a  GM  [2        R"                  " USS9 n[        R4                  " U5       H3  n[        R                  R                  UU5      nUR7                  UUS9  M5     SSS5        [8        R:                  " U5        g! , (       d  f       N»= f! [*         aI  nUR-                  S	U< S
UR.                  S   < 35        UR1                  SU-  S-   5         SnAGMÎ  SnAff = f! , (       d  f       NŒ= f)aE  
Backup all files and dirs with ntacl for the serive 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©rT   zFailed to get the ntacl for z: r:   z!The permissions for %s may not bez restored correctlyúw:gz©rÒ   Úmode©Úarcname)r   rO   rP   r   rQ   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_pathrQ   Ú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_onliner1  î  sù  € ô Ó€Fä�'œ3×ÑÜ×"Ò" 7Ó+ˆä˜8Ó-€Jà€Iä×ÒÓ!€Hàˆ[€FØˆZ€Fç
Ø—
‘
“ˆØ—
‘
“ˆà—‘¨%�Ó0ˆAØ—_‘_ U¨f©IÓ6ˆFÜ—W‘W—\‘\ %¨6©Ó3ˆFà× Ñ   8¡×-Ñ-Ø—‘˜fÔ%Ø—‘˜fÔ%Ü—’˜Õ à!×*Ñ*¨6Ó2�Ü˜& $Ô'¨1Ø—G‘G˜D”M÷ (ð6Ø!+×!3Ñ!3°FÀDÐ!3Ð!I�Ü" 6¨>Ö:ñ! 1÷	 ‰&ô6 
�ŠÐ,°6Ò	:¸cÜ—J’J˜xÖ(ˆDÜ—7‘7—<‘< ¨$Ó/ˆDØ�G‰G�D $ˆGÓ'ñ )÷ 
;ô
 ‡M‚M�(Õ÷% (Õ'ûô !ó 6Ø—’Û$ a§f¡f¨Q£ið1ô 2à—‘ÐBÀVÑKØ4ñ 5÷ 6ó 6ûð6ú÷ 
;Õ	:ús1   Ä=HÅHÆAI+È
H	È
I(È=I#É#I(É+
I9c           	      óL  • U R                  S5      R                  SS5      S   n[        R                  " 5       n[	        5       n[        XBU5      n[        R                  " U 5       GH„  u  p‰n
[        R                  R                  X€S9n[        R                  R                  X[5      nU	 Ht  n[        R                  R                  X�5      n[        R                  R                  XÍ5      n[        R                  " XöU5        UR                  XæSS9n[        UU5        Mv     U
 HÁ  n[        R                  R                  UU5      n[        R                  R                  UU5      n[        R                  " XöU5        UR                  XæSS9n[        UU5        [!        US5       nUR#                  5       n[!        US5       nUR%                  U5        S	S	S	5        S	S	S	5        MÃ     GM‡     [&        R                   " US
S9 n[        R(                  " U5       H3  n[        R                  R                  UU5      nUR+                  UUS9  M5     S	S	S	5        [,        R.                  " U5        g	! , (       d  f       N¡= f! , (       d  f       GMm  = f! , (       d  f       NI= f)z4
Backup files and ntacls to a tarfile for a service
r·   r:   éÿÿÿÿ©ÚstartTr  Úrbr  Nr  r  r  )ÚrstripÚrsplitr  r  r   ró   r$   Úwalkr%   Úrelpathr'   r	   rÜ   rM   r  Úcreate_filer  r  r  r  r  r   r!  r"  )Úsrc_service_pathr#  rù   rQ   r?   ÚtempdirrH   Úntacls_helperÚdirpathÚdirnamesÚ	filenamesÚrel_dirpathÚdst_dirpathÚdirnamer  r  r  ÚfilenameÚsrc_filer/  Údst_filer0  rÒ   r%   s                           r   Úbackup_offlinerH  *  sù  € ð ×%Ñ% cÓ*×1Ñ1°#°qÓ9¸"Ñ=€GÜ×ÒÓ €GÜ&Ó(€Lä  ¸ÓA€Mä(*¯ªÐ0@×(AÑ$ˆ˜9ä—g‘g—o‘o g�oÐFˆÜ—g‘g—l‘l 7Ó8ˆó  ˆGÜ—'‘'—,‘,˜wÓ0ˆCÜ—'‘'—,‘,˜{Ó4ˆCä�JŠJ�s¨'Ô2Ø*×3Ñ3°CÈtÐ3ÐTˆNÜ˜s NÖ3ñ  ó "ˆHÜ—'‘'—,‘,˜w¨Ó1ˆCÜ—'‘'—,‘,˜{¨HÓ5ˆCä×Ò˜S°Ô8Ø*×3Ñ3°CÈtÐ3ÐTˆNÜ˜s NÔ3ô �c˜4” HØ—}‘}“�Ü˜#˜t”_¨Ø—N‘N 4Ô(÷ %÷ !‘ô "ñ )Bô< 
�ŠÐ,°6Ò	:¸cÜ—J’J˜wÖ'ˆDÜ—7‘7—<‘< ¨Ó.ˆDØ�G‰G�D $ˆGÓ'ñ (÷ 
;ô
 ‡M‚M�'Õ÷ %•_ú÷ !—ú÷ 
;Õ	:ús1   Æ'JÇI1	ÇJÈAJÉ1
I?É;JÊ
JÊ
J#c           	      óì  • [        5       nUR                  S5      R                  SS5      S   n[        R                  " 5       nUR                  5       n[        R                  " U5      n[        XSU5      n	[        5       n
[        R                  " U 5       nUR                  US9  SSS5        [        R                  " U5       GH`  u  pÍn[        R                  R!                  XÆS9n[        R                  R#                  [        R                  R%                  X5      5      nU HÔ  nUR'                  S5      (       a  M  [        R                  R%                  UU5      n[        R                  R%                  UU5      n[        R                  R)                  U5      (       d  [*        R,                  " UX¥5        [/        U5      nU(       a  U	R1                  UUU
5        M½  UR3                  SU-  S	-   5        MÖ     U GH  nUR'                  S5      (       a  M  [        R                  R%                  UU5      n[        R                  R%                  UU5      n[        R                  R5                  U5      (       d  [*        R6                  " UX¥5        [/        U5      nU(       a  U	R1                  UUU
5        OUR3                  S
U-  S	-   5        [        US5       nUR9                  5       n[        US5       nUR;                  U5        SSS5        SSS5        GM"     GMc     [<        R>                  " U5        g! , (       d  f       GN¡= f! , (       d  f       NI= f! , (       d  f       GMs  = f)z6
Restore files and ntacls from a tarfile to a service
r·   r:   r3  )r%   Nr4  r   z)Failed to restore ntacl for directory %s.z) Please check the permissions are correctz$Failed to restore ntacl for file %s.r6  r  ) r   r7  r8  r  r  Úget_domain_sidr   rQ   ró   r   r  r  Ú
extractallr$   r9  r%   r:  Únormpathr'   ÚendswithÚisdirr	   rÜ   r  rm   r  Úisfiler;  r  r  r!  r"  )Úsrc_tarfile_pathÚdst_service_pathÚ
samdb_connrù   r$  r?   r=  Údom_sid_strrQ   r>  rH   r  r?  r@  rA  rB  rC  rD  r  r  r  rE  rF  r/  rG  s                            r   Úbackup_restorerT  Z  s�  € ô Ó€FØ×%Ñ% cÓ*×1Ñ1°#°qÓ9¸"Ñ=€GÜ×ÒÓ €Gà×+Ñ+Ó-€KÜ×Ò˜{Ó+€Gä  ¸ÓA€MÜ&Ó(€Lä	�ŠÐ&Ô	'¨1Ø	�‰˜'ˆÑ"÷ 
(ô )+¯ª°×(8Ñ$ˆ˜9Ü—g‘g—o‘o g�oÐ=ˆÜ—g‘g×&Ñ&Ü�G‰G�L‰LÐ)Ó7ó9ˆó  ˆGØ×#Ñ# H×-Ó-Ü—g‘g—l‘l 7¨GÓ4�Ü—g‘g—l‘l ;°Ó8�Ü—w‘w—}‘} S×)Ñ)ä—J’J˜s LÔ:ä!1°#Ó!6�Þ!Ø!×*Ñ*¨3°ÀÖMà—N‘NØCÀcÑIØEñFöGñ  ô  "ˆHØ×$Ñ$ X×.Ó.Ü—g‘g—l‘l 7¨HÓ5�Ü—g‘g—l‘l ;°Ó9�Ü—w‘w—~‘~ c×*Ñ*ä×$Ò$ S¨,Ô@ä!1°#Ó!6�Þ!Ø!×*Ñ*¨3°ÀÕMà—N‘NÐ#IÈCÑ#OØ#Nñ$Oô Pô ˜#˜t”_¨Ø#Ÿ=™=›?�DÜ˜c 4œ¨HØ Ÿ™ tÔ,÷ )÷ %’_ô! "ñ+ )9ôT ‡M‚M�'Õ÷] 
(Ö	'ú÷V )�ú÷ %—_ús0   ÂM Ë M#Ë=M	ÌM#Í 
MÍ
M ÍM#Í#
M3)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_OWNERr]   r^   r_   rG   r3   r   r-   r7   rM   rm   r”   r­   r¯   ró   r  r  r1  rH  rT  r   r   r   Ú<module>ra     s+  ðñ$ ó 
Û Û ã Û Û Ý )ß /Ñ /ß *Ý Ý 8Ý )Ý Ý /Ý )ð "×7Ñ7Ø!×:Ñ:ñ;à!×8Ñ8ñ9ð "×7Ñ7ñ8Ð ð "×/Ñ/Ø!×/Ñ/ñ0à!×.Ñ.ñ/ð "×.Ñ.ñ/Ð ô
)˜	ô )òMò82ð ØØ"Øô#0ðN %)Ø05Ø"&ôd8òN4ôn÷@~+ñ ~+÷B2ñ 2ò: ò
ò9òx-ó`<r   