
    gCC                         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
  S SKJr  S SKJrJrJrJrJrJrJr  S SKJrJrJr  S SKJr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K$J%r%J&r&   " S S\5      r'g)    N)system_session)system_session_unix)security)DS_DOMAIN_FUNCTION_2000DS_DOMAIN_FUNCTION_2003DS_DOMAIN_FUNCTION_2008DS_DOMAIN_FUNCTION_2008_R2DS_DOMAIN_FUNCTION_2012DS_DOMAIN_FUNCTION_2012_R2DS_DOMAIN_FUNCTION_2016)CommandCommandErrorOption)DEFAULT_MIN_PWD_LENGTHProvisioningError	provision)FILL_DRS	FILL_FULLFILL_NT4SYNC)get_default_backend_store)functional_level   )common_ntvfs_optionscommon_provision_join_optionsc                      \ rS rSrSrSr\R                  \R                  S.r	\
" SSSS9\
" S	S
SSS9\
" SS
SSS9\
" SS
SSS9\
" SS
SSS9\
" SS
SSS9\
" SS
SSS9\
" SS
SSS9\
" SS
SS S9\
" 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\
" S0S
S%S1S9\
" S2S
S3S4S9\
" S5S
S3S6S9\
" S7S
S8S9S9\
" S:SS;S<9\
" S=S*S>/ S?QS@SAS/9\
" SBS*SC/ SDQSESFS/9\
" SGS*SH/ SIQSJSKS/9\
" SLS*SM/ SNQSOSPS/9\
" SQSRSSSTSUSV9\
" SWSXSS9\
" SYSSZS<9/r\
" S[S*/ S\QS]S^S_S`9/r\R                  \5        \R                   " 5       (       a"  \R                  \5        \R                  \5        / r                                    SeSa jrSb rSc rSdrgP)fcmd_domain_provision4   zProvision a domain.z%prog [options])	sambaoptsversionoptsz--interactivezAsk for names
store_true)helpactionz--domainstringDOMAINzNetBIOS domain name to use)typemetavarr!   z--domain-guidGUIDz!set domainguid (otherwise random)z--domain-sidSIDz set domainsid (otherwise random)z--ntds-guidz'set NTDS object GUID (otherwise random)z--invocationidz#set invocationid (otherwise random)z--host-nameHOSTNAMEzset hostnamez	--host-ip	IPADDRESSzset IPv4 ipaddressz
--host-ip6
IP6ADDRESSzset IPv6 ipaddressz--siteSITENAMEzset site namez--adminpassPASSWORDz(choose admin password (otherwise random)z--krbtgtpassz)choose krbtgt password (otherwise random)z--dns-backendchoicezNAMESERVER-BACKEND)SAMBA_INTERNALBIND9_FLATFILE	BIND9_DLZNONEzThe DNS server backend. SAMBA_INTERNAL is the builtin name server (default), BIND9_FLATFILE uses bind9 text database to store zone information, BIND9_DLZ uses samba4 AD to store zone information, NONE skips the DNS setup entirely (not recommended)r/   )r%   r&   choicesr!   defaultz	--dnspassz&choose dns password (otherwise random)z--rootUSERNAMEzchoose 'root' unix usernamez--nobodyzchoose 'nobody' userz--users	GROUPNAMEzchoose 'users' groupz--blankz.do not add users or groups, just the structure)r"   r!   z--server-roleROLE)domain controllerdczmember servermember
standalonez^The server role (domain controller | dc | member server | member | standalone). Default is dc.r8   z--function-levelzFOR-FUN-LEVEL)2000200320082008_R22016zThe domain and forest function level (2000 | 2003 | 2008 | 2008_R2 - always native | 2016). Default is (Windows) 2008_R2 Native.r?   z--base-schemazBASE-SCHEMA)r?   2008_R2_old20122012_R2r@   2019z8The base schema files to use. Default is (Windows) 2019.rD   z--adprep-levelFUNCTION_LEVEL)SKIPr?   rB   rC   r@   zNThe highest functional level to prepare for. Default is based on --base-schemaNz
--next-ridintNEXTRIDi  zGThe initial nextRid value (only needed for upgrades).  Default is 1000.)r%   r&   r4   r!   z--partitions-onlyzEConfigure Samba's partitions, but do not modify them (ie, join a BDC)z--use-rfc2307z/Use AD to store posix attributes (default = no)z--use-xattrs)yesnoautoz[yes|no|auto]zDefine if we should use the native fs capabilities or a tdb file for storing attributes likes ntacl when --use-ntvfs is set. auto tries to make an intelligent guess based on the user rights and system capabilitiesrK   )r%   r3   r&   r!   r4   c&           	      v   U R                  SUS9U l        UR                  5       n&U&R                  n'Ub  Un(OU R	                  5       n(U(c  Sn(U R
                  (       d  SnU(       Ga@  SSKJn)  SS Kn*SUS jn+ U*R                  5       R                  SS	5      S	   R                  5       n,U+" S
U,5      n-U-S;   a  [        S5      e U-R                  S5      S   n,U+" SU,5      nUc  [        S5      eU+" SS5      nU+" SS5      nUS;   a  [        S5      eUS:X  a!  U+" SU(5      nUR                  5       S;   a  S n(S n U)" S5      n.U R                  U.5      n/U/(       a  U R                  R!                  SU/-  5        O-U)" S5      n0U.U0:X  d  U R                  R!                  S5        OU.nO9Mn  UR"                  R%                  S5      n-U-c  [        S5      eUc  [        S5      eU(       a$  U R                  U5      n/U/(       a  [        U/5      eOU R                  R'                  S5         [(        R*                  " U5      n1Uc  U"S;   a  SnOU"S ;   a  S!nOU"S";   a  S#nOS$nUS:X  a  S n2O3US%:X  a  [.        n2O&US!:X  a  [0        n2OUS#:X  a  [2        n2OUS$:X  a  [4        n2US:X  a  Uc  U(n[6        n3U(       a  [8        n3OU(       a  [:        n3Ub:  [<        R>                  RA                  U5      (       d  [<        RB                  " U5        Sn4US&:X  a  S'n4GOUS(:X  a  U (       d  S'n4GOU (       d  [        S)5      eUS(:X  a  U&R%                  S*5      (       d  U(       a2  [D        RF                  " [<        R>                  RI                  U5      S+9n5O][D        RF                  " [<        R>                  RI                  [<        R>                  RK                  U&R%                  S,5      5      5      S+9n5  [L        RN                  RQ                  U&U5RR                  S-S.[U        5       S/5        S'n4U5RY                  5         U4(       a  U R                  R'                  S15        Ub  [Z        R\                  " U5      n[_        5       n6U$c
  [a        5       n$ [c        U R                  U640 S2U'_S3U_S4U3_SU-_S5U_S6U_S7U_S8U	_S9U
_S:U_S;U_S<U_S=U_S>U_S?U_S@U_SAU_SBU_SCU_SDU_SEU_SFU_SGU_SHU1_SIU4_SJU_SKU&_SLU _SMU!_SNS'_SOU"_SPW2_SQU#_SRU$_SSU%_6n7U7Rg                  U R                  5        g ! [         a    S n, GNf = f! [         a    S n, GNcf = f! [,         a    [        SU S35      ef = f! [V         a    U R                  R'                  S05         GNhf = f! U5RY                  5         f = f! [d         a  n8[        STU85      eS n8A8ff = f)VNr   )namequietnoneTr   )getpassc                     Ub  [        U < SU< S3SS9  O[        U < S3SS9  [        R                  R                  5         [        R                  R                  5       R                  S5      =(       d    U$ )Nz [z]:  )endz: 
)printsysstdoutflushstdinreadlinerstrip)promptr4   s     ?/usr/lib/python3/dist-packages/samba/netcmd/domain/provision.pyask%cmd_domain_provision.run.<locals>.ask   sW    &9sCF,#6

  "yy))+2248CGC    .r   Realm)N zNo realm set!DomainzNo domain set!z$Server Role (dc, member, standalone)r9   z=DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE)r/   zNo DNS backend set!z=DNS forwarder IP address (write 'none' to disable forwarding))NrO   zAdministrator password: z%s.
zRetype password: zSorry, passwords do not match.
realmz,Administrator password will be set randomly!'z' is not a valid domain level)r?   rA   rF   )rB   rB   )rC   rC   r@   2008R2rI   FrK   zr--use-xattrs=no requires --use-ntvfs (not supported for production use).  Please re-run with --use-xattrs omitted.z
posix:eadb)dirzprivate dirzO:S-1-5-32G:S-1-5-32zS-1-5-32nativezZYou are not root or your system does not support xattr, using tdb backend for attributes. znot using extended attributes to store ACLs and other metadata. If you intend to use this provision in production, rerun the script as root on a system supporting xattrs.smbconf	targetdir
samdb_filldomain
domainguid	domainsidhostnamehostiphostip6sitenamentdsguidinvocationid	adminpass
krbtgtpassmachinepassdns_backenddns_forwarderdnspassrootnobodyusers
serverroledom_for_fun_leveluseeadbnext_ridlp	use_ntvfsuse_rfc2307skip_sysvolaclbase_schemaadprep_levelplaintext_secretsbackend_storebackend_store_sizezProvision failed)N)4
get_loggerloggerget_loadparm
configfile_get_nameserver_ipraw_argvrP   socketgetfqdnsplitupper
IndexErrorr   lower_adminpass_issueerrfwrite_lpgetinfor   string_to_levelKeyErrorr	   r
   r   r   r   r   r   ospathisdirmakedirstempfileNamedTemporaryFileabspathdirnamesambantaclssetntaclrM   r   	Exceptioncloser   dom_sidr   r   r   r   report_logger)9selfr   r   interactiverm   domain_guid
domain_sid	ntds_guidru   	host_namehost_iphost_ip6rv   siterw   rx   ry   rz   r{   ldapadminpassr|   r}   r~   rN   blankserver_rolefunction_levelr   r   partitions_onlyrk   
use_xattrsr   r   r   r   r   r   r   rj   suggested_forwarderrP   r   r^   r4   re   adminpassplainissueadminpassverifyr   provision_adprep_levelrl   eadbfilesessionresultes9                                                            r]   runcmd_domain_provision.run   s   J oo;eoD##%--$"/"&"9"9";"*&,#}}K'D ..*00a8;AAC )E
""?33++c*1- 7+F~"#344DdKK]_opKj("#899.. #$cex y &&(N:*.'$(M!()C!D--n=IIOOGeO4&-.A&BO)_<		(JK$2	  MM%%g.E}"?33~"#344)))4E"5))  KKKL	R 0 @ @ P  88  &(%+(%6!%)"X%%?"V#%<"Y&%?"V#%<"**}/D/M
%J!J 77==++I&D6!)D  J K K6!"&&*>*>22rwwy7QR22rwwrwwWYW]W]^kWlGm7noCLL))"dii*@*4*=*?*2	4
 !D 

KK  J  K!!))*5J " 57M	6t{{&F07FCLF*4F<AFJPF +6F BLF )2	F
 '.F
 8@F )-F 8AF -9F ENF +5F CNF ,7F GTF (/F 6:F CIF &+F +6F J[F (,F 7?F DFF R[F ,7F HMF ,7F  -C!F" 2C#F$ .;%F& 3E'FF0 	T[[)}    ^  	R>"22OPQQ	R@ ! CKK$$  &B  CC 

B ! 	61155	6sm   81T T, &T? $8U ?A>V T)(T),T<;T<?U%VV VV V
V8'V33V8c                    SSK Jn  SnUR                  U5      (       d  U R                  R	                  SU-  5        gSn [        US5      nU HP  nUR                  S5      (       d  M  UR                  5       R                  5       S   s  Ub  UR                  5         $ $    Ub  UR                  5         U R                  R	                  S	U-  5        g! Ub  UR                  5         f f = f)
z5Grab the nameserver IP address from /etc/resolv.conf.r   )r   z/etc/resolv.confzFailed to locate %sNr
nameserverzNo nameserver found in %s)
r   r   isfiler   warningopen
startswithstripr   r   )r   r   RESOLV_CONFhandlelines        r]   r   'cmd_domain_provision._get_nameserver_ipq  s    ({{;''KK 5 CD		+s+F|44zz|))+B//! "  !7+EF ! "s   AC !C C+c                     [        U[        5      (       a  UR                  S5      n[        U5      [        :  a	  S[        -  $ [
        R                  " U5      (       d  gg)zLReturns error string for a bad administrator password,
or None if acceptableutf8zdAdministrator password does not meet the default minimum password length requirement (%d characters)zBAdministrator password does not meet the default quality standardsN)
isinstancebytesdecodelenr   r   check_password_quality)r   rv   s     r]   r   %cmd_domain_provision._adminpass_issue  s]     i''!((0Iy>22?() ) --i88% r`   )r   )%NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNrK   FNNFNN)__name__
__module____qualname____firstlineno____doc__synopsisoptionsSambaOptionsVersionOptionstakes_optiongroupsr   takes_optionsntvfs_optionsextendr   r   is_ntvfs_fileserver_builtr   
takes_argsr   r   r   __static_attributes__ r`   r]   r   r   4   s    H ))-- 	_\Jz(0	2Xv7	9~He6	8}8V=	?h9	;}8Z"	${;(	*|(L(	*xh
#	%}8Z>	@~Hj?	AX7KPE (	) 	{:<	>xh
1	3z**	,yx*	,yD	FXv[t*	, 	!/B W 	" 	X}TN	 	h8HEd	 	|%D]	_"[dp	r|:kl{>MB 	~H6K&j 	M 67&&((12]+J.2 ##G`*DG.r`   r   )(r   rV   r   r   samba.getoptgetoptr   
samba.authr   samba.auth_utilr   samba.dcerpcr   
samba.dsdbr   r   r   r	   r
   r   r   samba.netcmdr   r   r   samba.provisionr   r   r   samba.provision.commonr   r   r   samba.samdbr   r   commonr   r   r   r   r`   r]   <module>r      sY   2 
 
    % / !   7 6 P P D D 1 " Ga7 ar`   