
    Sd?.                     v    d dl Z d dlmZ d dlmZ d dlmZmZ d dl	m
Z
mZmZ d dlmZ d dlmZ  G d de
      Zy)	    N)system_session)check_and_update_flDS_DOMAIN_FUNCTION_2000)CommandCommandErrorOption)SamDB)functional_levelc            	           e Zd ZdZdZej                  ej                  ej                  dZ	 e
dddedd	       e
d
ddd       e
ddg dd       e
ddg dd      gZdgZ	 	 ddZy)cmd_domain_levelz(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	           
          |dvrt        d|z        |j                         }	|j                  |	d      }
t        |t	               |
|	      j                         d}|dk(  r2||j                  d      sj                          d}	 t        |	       	 j                  d	j                         z  t        j                  d
g      }t        |      dk(  sJ j                  t        j                  d
dg      }t        |      dk(  sJ j                  d	j                         z  t        j                   dz  d
g      t              dk(  sJ j                  dj                         z  t        j                   dd
g      }t        |      dk\  sJ t"        t"        d
|d   v rt%        |d   d
   d         d
|d   v rt%        |d   d
   d         t%        |d   d   d         d |D ]6  }d
|v r)t%        |d
   d         k  st%        |d
   d         0t"         n t"        k  s	t"        k  rt        d      t"        k  rt        d      kD  rt        d      kD  rt        d      	  fd} f
d}|dk(  r|rJ  |        y |dk(  r	  |        |rj'                          y t)        d|z        # t        $ r}j                          |d }~ww xY w# t        $ r}|rj                          |d }~ww xY w# t        $ r}|rj                          |d }~ww xY w)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   nTMixedDomainz$(&(objectClass=crossRef)(nCName=%s)))r,   
expressionr-   zCN=Sites,%sz(objectClass=nTDSDSA)r   zSDomain 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                     j                  dz         t        k(  rdk7  rj                  d       t        k(  rdk7  rj                  d       t        k(  rdk7  rj                  d       j                  d       t        j                        } j                  d| z          t        k(  rrd} nt        j                        } j                  d	| z          t        j                        } j                  d
| z          y )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_showz%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                  D  
 g } }
	 t        j                  
      }|k  rdk(  rt        d      |kD  rt        d      dk7  rt	        j
                         }t	        j                  	      |_        t	        j                  dt        j                  d      |d<   j                  |       t	        j
                         }d   j                  |_        t	        j                  dt        j                  d      |d<   	 j                  |       t	        j
                         }t	        j                  	      |_        t	        j                  t        |      t        j                  d      |d<   j                  |       t	        j
                         }d   j                  |_        t	        j                  t        |      t        j                  d      |d<   	 j                  |       |}| j                  d	       t        j                        }|k  rt        d
      ||kD  rt        d      t	        j
                         }t	        j                  dj!                         z        |_        t	        j                  t        |      t        j                  d      |d<   j                  |       | j                  d       | j                  d       j#                  dj%                  |              y # t        $ r t        d
 d      w xY w# t        j                  $ r.}|j                  \  }}|t        j                  k7  r Y d }~Cd }~ww xY w# t        j                  $ r.}|j                  \  }}|t        j                  k7  r Y d }~d }~ww xY w)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!0r/   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_basednr3   join)msgscurrent_level_domainnew_level_domainmeenumemsge2new_level_forestr6   domain_levelforest_levelr7   r8   r9   r:   res_domain_crosssamdbr;   s            r<   do_raisez&cmd_domain_level.run.<locals>.do_raise   sD   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t3#?#??! @"( || #%77LT4s;;; <s;   K> L M >LM-#MMN1#NNr"   z)Internal Error subcommand[%s] not handled)r   get_loadparmget_credentialsr	   r   r6   
startswithtransaction_startr   	Exceptiontransaction_cancelsearchrP   rD   
SCOPE_BASElenSCOPE_SUBTREEr   inttransaction_commitAssertionError)r;   r    r   r\   r[   quietr   r   r   r(   credsin_transactionrV   
res_forest
res_domainres_dc_smsgr=   r_   r6   r7   r8   r9   r:   r]   r^   s   `  ``              @@@@@@@r<   runzcmd_domain_level.run:   s   ..UXbbcc##%((d(C!.*:"'B0 OO%	 aiq||F7K##%!N#E2.
3	&85;R;R;T&T,/NNCZB[ & ]Jz?a'''is~~-Do,V & XJz?a'''$||,>AXAXAZ,Z252C2C7]`i7i3J2K  ,  M '(A---||ME4K4K4M$M*-*;*;H_+B*C $ EH x=A%%% 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#:L 55H_9_"#xyy55"#klll*"#{||l*"  $J  K  K +	 	0L	 L	\ %%%I7"

 ((*H:UVV]  ((*h  	((*G	d  !,,.sP   K" !E<L A,L :L* "	L+K==L	L'L""L'*	M3MM)NNNFNNN)__name__
__module____qualname____doc__synopsisoptionsSambaOptionsCredentialsOptionsVersionOptionstakes_optiongroupsr   rN   takes_options
takes_argsrt    r>   r<   r   r   #   s    27H ))..-- 	tW#JQT3	(tYZEh8n_	ah8n_	aM JFJDHAWr>   r   )rD   samba.getoptgetoptrz   
samba.authr   
samba.dsdbr   r   samba.netcmdr   r   r   samba.samdbr	   sambar
   r   r   r>   r<   <module>r      s/   2   % C 6 6  "XWw XWr>   