
    !h6                         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	  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5      r " S	 S
\5      rg)    N)system_session)CommandCommandErrorOption)get_fsmo_roleowner)
setup_path)SamDBc                   *    \ rS rSrSrS rS rS rSrg)ldif_schema_update'   z-Helper class for applying LDIF schema updatesc                 <    SU l         S U l        S U l        SU l        g )NF )
is_defunctunknown_oiddnldif)selfs    C/usr/lib/python3/dist-packages/samba/netcmd/domain/schemaupgrade.py__init__ldif_schema_update.__init__*   s    	    c                    UR                   u  p#U[        R                  :X  a*  U R                  (       a  [	        SU R
                  -  5        gU R                  b(  [	        SU R                  < SU R
                  < 35        gg)z>Checks if we can safely ignore failure to apply an LDIF updatez)Defunct object %s doesn't exist, skippingTzSkipping unknown OID z for object F)argsldbERR_NO_SUCH_OBJECTr   printr   r   )r   errornumerrstrs       r   can_ignore_failure%ldif_schema_update.can_ignore_failure0   sa    

 #(((T__=GH)T=M=MtwwWXr   c                      UR                  U R                  S/S9  g	! [        R                   aW  nUR                  S   [        R
                  :X  a0  UR                  5         UR                  U R                  S/S9   SnAO	e SnAff = f g	! [        R                   a]  nU R                  U5      (       a   SnAg[        SU-  5        [        S5        [        S5        [        SU R                  -  5        e SnAff = f)
z*Applies a single LDIF update to the schemazrelax:0)controlsr   NException: %sz4Encountered while trying to apply the following LDIFz4----------------------------------------------------z%s   )	modify_ldifr   r   LdbErrorr   ERR_INVALID_ATTRIBUTE_SYNTAXset_schema_update_nowr    r   )r   samdbes      r   applyldif_schema_update.apply>   s    	!!$))yk!B2 1 << 66!9 @ @@ //1%%dii9+%F G  || 		&&q))o)*LMLMdTYY&'		s?    B
AB?B BB

B D #C;>=C;;D )r   r   r   r   N)	__name__
__module____qualname____firstlineno____doc__r   r    r,   __static_attributes__ r   r   r   r   '   s    7r   r   c                       \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSS\SS	S
9\" SSSSS9\" SSSSS9\" SSS/ SQSSS9\" S\SSS9\" S\SSS9/rS  rS! rS" rS#rg)$cmd_domain_schema_upgrade_   zDomain schema upgradingz%prog [options])	sambaoptsversionoptscredoptsz-Hz--URLz%LDB URL for database or target serverURLH)helptypemetavardestz-qz--quietzBe quiet
store_true)r=   actionz-vz	--verbosez
Be verbosez--schemachoiceSCHEMA)20122012_R220162019z9The schema file to upgrade to. Default is (Windows) 2019.rH   )r>   r?   choicesr=   defaultz
--ldf-fileNzBJust apply the schema updates in the adprep/.LDF file(s) specified)r>   rJ   r=   z
--base-dirz4Location of ldf files Default is ${SETUPDIR}/adprep.c           	         Sn[        5       nU GH  nUR                  5       nUS:X  a1  UR                  S:X  a  M,  X4R                  U5      -  n[        5       nMK  UR	                  5       R                  S5      (       a*  US[        S5      *  [        UR                  5       5      -   nOMUR	                  5       R                  S5      (       a)  US[        S5      *  [        UR                  5       5      -   nUR                  S5      nUS   R                  5       S:X  a  US   R                  5       Ul        US   R                  5       S	:X  a  UR                  5       R                  S
S5      nUR                  5       R                  SS5      nUR                  5       R                  SS5      nUR                  5       R                  SS5      nUS   R                  5       S;   ar  Uu  pxSU;   ah  UR                  UR                  5       SU< SU< S3S/S9n	[        U	5      S:w  a  Xl        O)[        U	S   S   S   5      n
UR                  USU
-   5      nUS   R                  5       S:X  a,  US   R                  5       R                  5       S:X  a  SUl        US   R                  5       S:X  a'  US   R                  5       R                  5       S:X  a  SnU=R                  US -   -  sl        GM     U$ )!z
Applies a series of updates specified in an .LDIF file. The .LDIF file
is based on the adprep Schema updates provided by Microsoft.
r   r   zDC=XNzCN=X:r   r%   
changetypez: ntdsschemaaddz: addz: ntdsschemamodifyz: modifyz: ntdsschemamodrdnz: modrdnz: ntdsschemadeletez: delete)rdnattid
subclassofsystemposssuperiorssystemmaycontainsystemauxiliaryclass.z(|(attributeId=z)(governsId=z))ldapDisplayName)base
expressionattrs 	isdefuncttrueTaddshowinadvancedviewonlyzreplace: showInAdvancedViewOnly
)r   rstripr   r,   upperendswithlenstrget_default_basednsplitlowerstripr   replacesearchget_schema_basednr   r   )r   r*   	ldif_filecountldif_oplinevalues_valueresdisplay_names              r   _apply_updates_in_file0cmd_domain_schema_upgrade._apply_updates_in_filey   s   
 $& D;;=D rz <<2% u-- -. zz|$$V,,Mc&k\*S1I1I1K-LL&&v..Mc&k\*S1I1I1K-LLZZ_Fay D(#AY__.
 ay L0zz|++,=,35zz|++,@,68zz|++,@,68zz|++,@,68 ay  %= = " %<,,E,C,C,E(-u36.?-@ ' BC
 3x1}.3+'*3q62C+DQ+G'H#||E33EF ay K/F1IOO4E4K4K4MQW4W%)" ay E)fQioo.?.E.E.GKc.c8 LLD4K'LLU X r   c                    [        SU-  5        Sn [        [        R                  R	                  X25      5      nU R                  X5      nU(       a  UR                  5         [        SU-  5        U$ ! U(       a  UR                  5         f f = f)zBWrapper function for parsing an LDIF file and applying the updateszApplying %s updates...Nz%u changes applied)r   openospathjoinrs   close)r   r*   update_filebase_dirrj   rk   s         r   _apply_update'cmd_domain_schema_upgrade._apply_update   s{     	&45		"RWW\\(@AI//AE !"U*+ ! s   9A2 2Bc                 	    SSK Jn  SSKJn  SnUR                  S5      nUR                  S5      nUR                  5       nUR                  U5      n	UR                  S	5      n
UR                  S
5      nUR                  S5      nUR                  S5      nS n[        U
[        5       XS/S9nUR                  S5      c  UR                  SS5        [        S5        Sn[        R                   " XR#                  5       5      n[%        U['        UR)                  5       5      S
5      nUU:w  a  [        S5      eU(       a  UR+                  S5      nGO/ nUR-                  U5      nUR/                  UR)                  5       [        R0                  S/S9n[3        U5      S:w  a  [        S5      e[5        US   S   S   5      S-   n[7        S5      nUc,  [8        R:                  " 5       n[7        S5      n U" UU5        Un[C        UUS-   5       GH,  nSU-  nURE                  U5        [F        RH                  RK                  [F        RH                  RM                  UUS-   5      5      nU(       d  Mc  [F        RH                  RO                  U5      (       d  M   [P        RR                  " SUS U/[P        RT                  [P        RT                  US!9nUR[                  5       u  nnUR\                  (       a4  [        S#U< S$U< 35        [>        R@                  " U5        [        S5      e[        S%U< S&U< 35        GM/     Uc  [7        S'5      nUR_                  5         SnSn U H  n UU Ra                  UU U5      -  nM     US:  a  URc                  5         [        S(5        O[        S)5        URe                  5          U(       a  UR                  SS,5        U(       a  [>        R@                  " U5        U(       a  [        S5      eg ! [         a.  nU R                  R	                  SU-  5        [        S5      eS nAff = f! [<         a4  n[        SU-  5        [>        R@                  " U5        [        S5      eS nAff = f! [V        [X        4 a"    [>        R@                  " U5        [        S"5      ef = f! [<         a6  n[        S*U-  5        [        S+5        URe                  5         Sn S nAGN5S nAff = f)-Nr   )read_ms_markdownz$Exception in importing markdown: %s
zIFailed to import module markdown, please install python3-markdown package)SchemaFr8   r:   r<   schemaldf_filer|   z#transaction_index_cache_size:200000)urlsession_infocredentialslpoptionszdsdb:schema update allowedyesz;Temporarily overriding 'dsdb:schema update allowed' settingTz%This server is not the schema master.,objectVersion)rU   scoperW   r%   z*Could not determine current schema versionzadprep/WindowsServerDocsz*adprep/WindowsServerDocs/Schema-Updates.mdz!Exception in markdown parsing: %szFailed to upgrade schemaz	Sch%d.ldfz.diffpatchz-i)stdoutstderrcwdz6Failed to upgrade schema. Is '/usr/bin/patch' missing?zException in patch: r]   zPatched z using adprepzSchema successfully updatedzNo changes applied to schemar$   z*Error encountered, aborting schema upgradeno)3samba.ms_schema_markdownr   ImportErroroutfwriter   samba.schemar   getget_loadparmget_credentialsr	   r   setr   r   Dnget_dsServiceNamer   rb   ri   rd   get_versionrh   
SCOPE_BASEra   intr   tempfilemkdtemp	Exceptionshutilrmtreerangeappendrw   rx   abspathry   exists
subprocessPopenPIPEOSErrorIOErrorcommunicate
returncodetransaction_startr}   transaction_committransaction_cancel)!r   kwargsr   r+   r   updates_allowed_overriddenr8   r:   r   credsr<   target_schema	ldf_filesr|   temp_folderr*   own_dnmasterschema_updatesendrq   startdiff_dirr{   versionupdatediffpr   r   rk   error_encounteredrj   s!                                    r   runcmd_domain_schema_upgrade.run   sv   	lA 	(%*"JJ{+	::j)##%((,JJsO

8,JJz*	::j)
 !.*:DEG 66./7FF/7OP)-&6689#E3u/F/F/H+I$,.VFGG &__S1NN $$]3C ,,E$;$;$=%(^^O;L  NC 3x1}"#OPPA/23a7E!"<=H&..0()UVC$[+> ' a0$w.%%f- wwrww||Hfw>N'OP;277>>$#7#7K&,,gvtT-J4>OO4>OOV &']]_NFF||ffMNk2*+EFF64@A/ 12 !(+H!!	%+	++E9hGG , qy((*3445((* &FF/6MM+&9:: w  	lIIOOCaGHjkk	lz ! C=ABMM+.&'ABBC$ $W- Kk2* ,J K KK@  	%/A%&>?$$& $		%sZ   P 3	Q 7R!A R8 "R8 
P?)P::P?
R /Q;;R 2R58
S8+S33S8r4   )r.   r/   r0   r1   r2   synopsisr   SambaOptionsVersionOptionsCredentialsOptionstakes_optiongroupsr   rb   takes_optionsrs   r}   r   r3   r4   r   r   r6   r6   _   s    ! H ))--.. 	tW#JQT3	(tYZEt[|LIz(:O	 	|#tX	Z|#tJ	LMUn&;r   r6   )rw   r   r   r   r   samba.getoptgetoptr   
samba.authr   samba.netcmdr   r   r   samba.netcmd.fsmor   samba.provisionr   samba.samdbr	   r   r6   r4   r   r   <module>r      sD   2 
    
  % 6 6 0 & 5 5pC; C;r   