
    g/                     v    S SK r S SKJr  S SKJr  S SKJrJr  S SK	J
r
JrJr  S SKJr  S SKJr   " S S\
5      rg)	    N)system_session)check_and_update_flDS_DOMAIN_FUNCTION_2000)CommandCommandErrorOption)SamDB)functional_levelc            
           \ 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QSS9\" SS/ SQSS9/rS/r  SS jrSrg)cmd_domain_level#   z(Raise domain and forest function levels.z&%prog (show|raise <options>) [options])	sambaoptscredoptsversionoptsz-Hz--URLz%LDB URL for database or target serverURLH)helptypemetavardestz-qz--quietzBe quiet
store_true)r   actionz--forest-levelchoice)200320082008_R220122012_R22016zIThe forest function level (2003 | 2008 | 2008_R2 | 2012 | 2012_R2 | 2016))r   choicesr   z--domain-levelzIThe domain function level (2003 | 2008 | 2008_R2 | 2012 | 2012_R2 | 2016)
subcommandNc	           
      0  ^ ^^^^^^^^^ US;  a  [        SU-  5      eUR                  5       n	UR                  U	SS9n
[        U[	        5       XS9mTR                  5       mSnUS:X  a8  Ub  UR                  S5      (       d  TR                  5         Sn [        TU	5         TR                  S	TR                  5       -  [        R                  S
/S9n[        U5      S:w  a  [        S5      eTR                  T[        R                  S
S/S9n[        U5      S:w  a  [        S5      eTR                  S	TR                  5       -  [        R                   ST-  S
/S9m[        T5      S:w  a  [        S5      eTR                  STR                  5       -  [        R                   SS
/S9n[        U5      S:X  a  [        S5      e["        m["        mS
US   ;   a  [%        US   S
   S   5      mS
US   ;   a  [%        US   S
   S   5      m[%        US   S   S   5      mS mU H<  nS
U;   a-  Tb  [%        US
   S   5      T:  a  [%        US
   S   5      mM4  M6  ["        m  O   T["        :  d
  T["        :  a  [        S5      eT["        :  a  [        S5      eTT:  a  [        S5      eTT:  a  [        S5      e UUUUUU 4S jnUUUUUUUUUU 4
S jnUS:X  a  U(       a   eU" 5         g US:X  a    U" 5         U(       a  TR'                  5         g [)        SU-  5      e! [         a  nTR                  5         UeS nAff = f! [         a  nU(       a  TR                  5         UeS nAff = f! [         a  nU(       a  TR                  5         UeS nAff = f)N)showraisez4invalid argument: '%s' (choose from 'show', 'raise')T)fallback_machine)urlsession_infocredentialslpFr$   ldapCN=Partitions,%smsDS-Behavior-Version)scopeattrs   zForest not foundnTMixedDomainzdomain not foundz$(&(objectClass=crossRef)(nCName=%s)))r-   
expressionr.   zno crossRef objects foundzCN=Sites,%sz(objectClass=nTDSDSA)r   zno nTDSDSA objects foundzSDomain and/or forest function level(s) is/are invalid. Correct them or reprovision!zFLowest function level of a DC is invalid. Correct this or reprovision!zVForest function level is higher than the domain level(s). Correct this or reprovision!zdDomain function level is higher than the lowest function level of a DC. Correct this or reprovision!c                  :  > TR                  ST-  5        T[        :X  a  TS:w  a  TR                  S5        T[        :X  a  TS:w  a  TR                  S5        T[        :X  a  TS:w  a  TR                  S5        TR                  S5        [        R                  " T5      n TR                  SU -   5        T[        :X  a
  T(       a  Sn O[        R                  " T5      n TR                  S	U -   5        [        R                  " T5      n TR                  S
U -   5        g )Nz0Domain and forest function level for domain '%s'r   z|
ATTENTION: You run SAMBA 4 on a forest function level lower than Windows 2000 (Native). This isn't supported! Please raise!z|
ATTENTION: You run SAMBA 4 on a domain function level lower than Windows 2000 (Native). This isn't supported! Please raise!z
ATTENTION: You run SAMBA 4 on a lowest function level of a DC lower than Windows 2003. This isn't supported! Please step-up or upgrade the concerning DC(s)! z!Forest function level: (Windows) z2000 mixed (NT4 DC support)z!Domain function level: (Windows) z)Lowest function level of a DC: (Windows) )messager   r
   level_to_string)outstr	domain_dnlevel_domainlevel_domain_mixedlevel_forestmin_level_dcselfs    ;/usr/lib/python3/dist-packages/samba/netcmd/domain/level.pydo_show%cmd_domain_level.run.<locals>.do_show   s   LLKiWX66;MQR;R  ]  ^66;MQR;R  ]  ^66;MQR;R  ~  LL%55lCFLL<vEF66;M6)99,GLL<vEF%55lCFLLDvMN    c                  v  >
 / n TnT
Gb   [         R                  " T
5      nUT::  a  TS:X  a  [        S5      eUT:  a  [        S5      eTS:w  a  [        R
                  " 5       n[        R                  " TT	5      Ul        [        R                  " S[        R                  S5      US'   TR                  U5        [        R
                  " 5       nTS   R                  Ul        [        R                  " S[        R                  S5      US'    TR                  U5        [        R
                  " 5       n[        R                  " TT	5      Ul        [        R                  " [        U5      [        R                  S5      US'   TR                  U5        [        R
                  " 5       nTS   R                  Ul        [        R                  " [        U5      [        R                  S5      US'    TR                  U5        UnU R                  S	5        Tb  [         R                  " T5      nUT::  a  [        S
5      eX:  a  [        S5      e[        R
                  " 5       n[        R                  " TSTR!                  5       -  5      Ul        [        R                  " [        U5      [        R                  S5      US'   TR                  U5        U R                  S5        U R                  S5        TR#                  SR%                  U 5      5        g ! [         a    [        ST
 S35      ef = f! [        R                   a.  nUR                  u  pVU[        R                  :w  a  e  S nAGNPS nAff = f! [        R                   a.  nUR                  u  pVU[        R                  :w  a  e  S nAGNS nAff = f)NzNew functional level 'z1' is not known to Samba as an AD functional levelr   zGDomain function level can't be smaller than or equal to the actual one!zMDomain function level can't be higher than the lowest function level of a DC!0r0   r,   zDomain function level changed!zGForest function level can't be smaller than or equal to the actual one!zdForest function level can't be higher than the domain function level(s). Please raise it/them first!r+   zForest function level changed!z!All changes applied successfully!
)r
   string_to_levelKeyErrorr   ldbMessageDndnMessageElementFLAG_MOD_REPLACEmodifyLdbErrorargsERR_UNWILLING_TO_PERFORMstrappendget_config_basednr4   join)msgscurrent_level_domainnew_level_domainmeenumemsge2new_level_forestr7   domain_levelforest_levelr8   r9   r:   r;   res_domain_crosssamdbr<   s            r=   do_raise&cmd_domain_level.run.<locals>.do_raise   s=   D#/ 'A'7'G'G'U$ $|38Ja8O&'pqq#l2&'vww &*A66%3AD),););C<?<P<PRa*cAo&LLOA+A.11AD),););C<?<P<PRa*cAo&"Q KKMvveY/-0-?-?()3+?+?+.-)* QKKM'*---0-?-?()3+?+?+.-)*LLO (8$<='#3#C#CL#Q #|3&'pqq#:&  (N  O  OKKMvve%7%:Q:Q:S%ST-0-?-?()3+?+?+.-)* Q<=KK;<LL4)I   A&)?~M~'  A  AA. << "'(vv3#?#??! @"( || #%77LTs;;; <s;   L L1 .M6 L.1M3#M..M36N8
#N33N8r#   z)Internal Error subcommand[%s] not handled)r   get_loadparmget_credentialsr	   r   r7   
startswithtransaction_startr   	Exceptiontransaction_cancelsearchrR   rF   
SCOPE_BASElenSCOPE_SUBTREEr   inttransaction_commitAssertionError)r<   r!   r   r^   r]   quietr   r   r   r)   credsin_transactionrX   
res_forest
res_domainres_dc_smsgr>   ra   r7   r8   r9   r:   r;   r_   r`   s   `  ``              @@@@@@@r=   runcmd_domain_level.run:   s   ..UXbbcc##%((d(C!.*:"'0 OO%	 aiq||F7K7K##%!N#E2.
7	&85;R;R;T&T,/NNCZB[ & ]J:!#"#566is~~-Do,V & XJ:!#"#566$||,>AXAXAZ,Z252C2C7]`i7i3J2K  ,  M #$)"#>??||ME4K4K4M$M*-*;*;H_+B*C $ EH 8}!"#=>> 3L2L&*Q-7":a=1H#I!#LM&*Q-7":a=1H#I!#LM!$Z]?%CA%F!GL*c1#+s37N3OPQ3R/SVb/b'*3/F+G+J'K 0c $;L   55H_9_"#xyy55"#klll*"#{||l*"  $J  K  K +	O 	O.L	 L	\ %%%I7"

 ((*H:UVVc  ((*p  	((*G	b  !,,.sI   L #HM 1M- 
L?(L::L?
M*M%%M*-
N7NN )NNNFNNN)__name__
__module____qualname____firstlineno____doc__synopsisoptionsSambaOptionsCredentialsOptionsVersionOptionstakes_optiongroupsr   rP   takes_options
takes_argsrw   __static_attributes__ry   r@   r=   r   r   #   s    27H ))..-- 	tW#JQT3	(tYZEh8n_	ah8n_	aM JFJDHDWr@   r   )rF   samba.getoptgetoptr   
samba.authr   
samba.dsdbr   r   samba.netcmdr   r   r   samba.samdbr	   sambar
   r   ry   r@   r=   <module>r      s/   2   % C 6 6  "[Ww [Wr@   