
    bӃ             0       L   d Z dZddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlmZmZ ddlmZ ddlZddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z(m)Z) ddl*m+Z+m,Z, ddlm-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ ddlRmSZSmTZTmUZUmVZVmWZWmXZXmYZY ddlZm[Z[m\Z\m]Z]m^Z^ ddl_Zddl`ZddlambZb ddlcmdZd ddlemfZf ddlgmhZh ddlcmiZi dZjdZkdZldZmd Zn G d! d"eo          Zp G d# d$eo          Zqd% Zrdid'Zsd( Ztd) Zud* Zv G d+ d,eo          Zwd- Zxd. Zyd/ Zzd0 Z{d1 Z|d2 Z}	 	 	 	 djd3Z~	 	 dkd4Zd5 Z	 	 dld6Zddddd7e,fd8Zd9 Zd: Zd; Zd< Zd= Zd> Z	 dmd?Zd@ ZdA ZdB ZdCZ	 	 	 dndDZ	 	 	 	 dodEZdFZdGZdHZefdIZdJ ZdK ZdL ZdM ZdN ZdO ZdidPZdQ ZddeVdddRdddddddddddddd&dd&d&ddfdSZdTdUdVdVdVdUdVdVdUdTdTdWZdX ZdY Zdpd[Zdqd\Zdqd]ZddeVddddddddddddRddddddddddddddddddddd&d&dd&d&ddd^d_d&ddd&f0d`Z	 	 	 	 	 	 	 drdaZdb Z G dc dde          Z G de dfe          Z G dg dhe          ZdS )sz/Functions for setting up a Samba configuration.restructuredText    )	b64encodeN)system_sessionadmin_session)system_session_unix)auth)smbdpassdb)param)DS_DOMAIN_FUNCTION_2000)	LdbMAX_NETBIOS_NAME_LENcheck_all_substitutedis_valid_netbios_char
setup_filesubstitute_varvalid_netbios_nameversionis_heimdal_built)securitymisc)SEC_CHAN_BDCSEC_CHAN_WKSTA)DS_DOMAIN_FUNCTION_2003DS_DOMAIN_FUNCTION_2008_R2ENC_ALL_TYPES)IDmapDB)read_ms_ldif)setntaclgetntacldsacl2fsacl)ndr_pack
ndr_unpack)
LDBBackend)get_empty_descriptorget_config_descriptor get_config_partitions_descriptorget_config_sites_descriptor!get_config_ntds_quotas_descriptor'get_config_delete_protected1_descriptor)get_config_delete_protected1wd_descriptor'get_config_delete_protected2_descriptorget_domain_descriptor$get_domain_infrastructure_descriptorget_domain_builtin_descriptorget_domain_computers_descriptorget_domain_users_descriptor!get_domain_controllers_descriptor'get_domain_delete_protected1_descriptor'get_domain_delete_protected2_descriptorget_dns_partition_descriptor'get_dns_forest_microsoft_dns_descriptor'get_dns_domain_microsoft_dns_descriptor'get_managed_service_accounts_descriptor)
setup_pathsetup_add_ldifsetup_modify_ldif	FILL_FULLFILL_SUBDOMAINFILL_NT4SYNCFILL_DRS)get_dnsadmins_sidsetup_ad_dnscreate_dns_dir_keytab_linkcreate_dns_update_list)Schema)SamDB)dbcheck)create_kdc_conf)get_default_backend_storez$31B2F340-016D-11D2-945F-00C04FB984F9z$6AC1786C-016F-11D2-945F-00C04FB984F9zDefault-First-Site-NamelastProvisionUSN   c                       e Zd Zd ZdS )ProvisionPathsc                     d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        d | _        d | _        d S N)	shareconfhklmhkcuhkcrhkuhkpdhkptsamdbidmapdbsecretskeytab
dns_keytabdnswinsdbprivate_dirbinddns_dir	state_dirselfs    :/usr/lib/python3/dist-packages/samba/provision/__init__.py__init__zProvisionPaths.__init__   s    					
    N__name__
__module____qualname__rc    rd   rb   rL   rL      s#            rd   rL   c                       e Zd Zd ZdS )ProvisionNamesc                    d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        d | _        d | _        d | _        i | _        d S rN   )ncsrootdndomaindnconfigdnschemadndnsforestdndnsdomaindnldapmanagerdn	dnsdomainrealmnetbiosnamedomainhostnamesitenamesmbconf	domainsid	forestsid
domainguidname_mapr`   s    rb   rc   zProvisionNames.__init__   s    !
rd   Nre   ri   rd   rb   rk   rk      s#            rd   rk   c                    t                      }d|_        |                    d                                          |_        |                    d          |_        |j                                        |_        t          j	        |j                  }|j                                        |_        |
                    d|j        z  dt          j        dg          }t          |d         d                                       d	d
          |_        ||_        | 
                    dd
t          j        g d          }	t          |	d         d         d                   |_        t          |	d         d         d                   |_        t          j        | |          t          j        | |	d         d         d                             d                    k    sXt-          d|j        dt          |	d         d         d                             d                    d|j        d|d	          t          |	d         d         d                   |_        t          |	d         d         d                   |_        |	d         d         |_        d|_        d|_        t;          dt=          |j                            D ]f}
t          |j        |
                   }dt          |j                  z  }||k    r||_        Adt          |j                  z  }||k    r||_        fg| 
                    ddt          |j                  z   t          j        dg          }t          |d         d                   |_         | 
                    d|j        z  d|z  t          j        dg          }t=          |          dk    rt-          d|j        d |          t          |d         d                                       d!|j        z   d
          |_!        | 
                    d"|d         j"        z  g |j        #          }t          |d         j"                  |_#        | 
                    dd$t          |j#                  z  t          j        d%d&g          }t          tI          tJ          j&        |d         d'         d                             |_'        t          tI          tJ          j&        |d         d&         d                             |_(        | 
                    d|t          j        g d(          }t          tI          tJ          j&        |d         d&         d                             |_)        tI          tT          j+        |d         d)         d                   |_,        tI          tT          j+        |d         d)         d                   |_-        |d                             d*          *t]          |d         d*         d                   t^          k     rt^          |_0        n&t]          |d         d*         d                   |_0        | 
                    d+tb          z  d,|z   t          j        dd-g          }t          |d         d                                       d.d
                              d/d
          |_2        | 
                    d+tf          z  d,|z   t          j        dd-g          }t=          |          d0k    rIt          |d         d                                       d.d
                              d/d
          |_4        nd|_4        |
                    d1t          |j,                  d2tT          j5        d3d4d5g6          }t=          |          d0k    r1t-          d7t          |j,                  d2tT          j5                  t          |d         d5         d                   d8k    r't]          |d         d4         d                   |_6        n=to          j8        t]          |d         d4         d                             j9        |_6        | 
                    d9t          j        d:gd;g<          }t=          |          dk    rd=}nd>}| 
                    d?|j        z  t          j        d:gd;g<          }t=          |          dk    rd=}nd>}|j        |rd@|_:        ndA|_:        n|s|rdB|_:        ndC|_:        tw          | |j                  }t          |          |j<        dD<   |S )Ea  Get key provision parameters (realm, domain, ...) from a given provision

    :param samdb: An LDB object connected to the sam.ldb file
    :param secretsdb: An LDB object connected to the secrets.ldb file
    :param idmapdb: An LDB object connected to the idmap.ldb file
    :param paths: A list of path to provision object
    :param smbconf: Path to the smb.conf file
    :param lp: A LoadParm object
    :return: A list of key provision parameters
    N	workgrouprv   z(flatname=%s)zCN=Primary DomainssAMAccountName
expressionbasescopeattrsr   $ z(objectClass=*))defaultNamingContextschemaNamingContextconfigurationNamingContextrootDomainNamingContextnamingContextsr   r   r   utf8z
basedn in z (z) and from z)is not the same ...r   r   zDC=ForestDnsZones,%szDC=DomainDnsZones,%sz(objectClass=site)z	CN=Sites,cnz(CN=%s)zOU=Domain Controllers,%sdNSHostNamezUnable to find DC called CN=z under OU=Domain Controllers,.zserverReference=%s)r   r   r   CN=NTDS Settings,%sinvocationID
objectGUIDinvocationId)r   	objectSidmsDS-Behavior-Versionr   r   z(name={%s})zCN=Policies,CN=System,displayName{}   z(cn=-)	xidNumbertype)r   r   z.Unable to find uid/gid for Domain Admins rid (ID_TYPE_BOTHz(samaccountname=dns)dnsearch_options:1:2)r   r   r   controlsTFz(samaccountname=dns-%s)	BIND9_DLZSAMBA_INTERNALBIND9_FLATFILENONE	DnsAdmins)=rk   	adminpassgetupperrx   rv   lowerru   sambadn_from_dns_namesearchldbSCOPE_SUBTREEstrreplacerw   r{   
SCOPE_BASErp   rq   DndecodeProvisioningErrorrV   ro   rn   rm   rr   rs   rangelenSCOPE_ONELEVELrz   ry   r   serverdnr#   r   GUID
invocationntdsguidr~   r   dom_sidr|   r}   intr   domainlevelDEFAULT_POLICY_GUIDpolicyidDEFAULT_DC_POLICY_GUIDpolicyid_dcDOMAIN_RID_ADMINISTRATORroot_gidpwdgetpwuidpw_giddns_backendr@   r   )rV   	secretsdbrW   pathsr{   lpnamesbasednrescurrentincrr   rs   res3res4
server_resres5res6res7res8res9res10has_legacy_dns_accountres11has_dns_accountdns_admins_sids                              rb   find_provision_key_parametersr      s    EEO 66+&&,,..EL&&//EKk''))EO#EO44F+##%%EK 

o <'(.B!$!2;K:L  N NC CF#3455==c2FFEEM ll&7 "#."4 "4 "4  5 5G $@A!DEEEN$9:1=>>ENF5&!!cfU-4QZ8N-OPQ-R-Y-YZ`-a-a'c 'c d d:?+++:=gajI_>`ab>c>j>jkq>r>r:s:s:s:s:?---"Q S S 	S
 $:;A>??ENwqz";<Q?@@EL
+,EIEE1c%)nn%%  1,EL0A0AB +E,EN0C0CD +E 
 <<#7(3u~+>+>>cFXae`f  h hDa''EN <<9u/@#@7&@!0  I ID 4yyA~~chctctctv|v| }~~~a/0088u9NPRSSEN)=Q
)J$&U^  = =JA)**EN <<#42S5H5HH!n-|<  > >D :dia1H1KLLMMEDItAw|/DQ/GHHIIEN <<#46!n 5[ 5[ 5[  \ \D :dia1Fq1IJJKKE !147;3G3JKKEO !147;3G3JKKEOAw{{*++3Q/03447NNN3Q(? @ CDD <<=3F#F5>!0}8M  O OD a''//R88@@bIIEN<<=3I#I5>!0#]3  5 5D 4yyA~~Q..66sB??GGRPP >>>u////1R1R1R&T!,f 5  7 7D 4yyA~~Y\]b]lYmYmYmYmow  pQ  pQ  !R  S  S  	S
476?1.00T!W[1!455c$q'+*>q*A&B&BCCJLL$:"0#7"8  : :E 	E

Q!%!&LL$=@Q$Q"0#7"8  : :E 	E

Q$ 	1 +E 0E	 #2 #,"&uen==N"%n"5"5EN;Lrd   Fc                 :   g }|s|                      dt          j        t          dg          }|d         t                   D ]Z}t	          j         dt          |                    st          |          d|}|                    t          |                     [|                    |d|d|           t          j                    }t          j        | d          |_	        t          j
        |t          j        t                    |t          <   |                      ddt          j        dg	          }t          |          dk    st          |d                   dk    r#t          j
        |t          j        d          |d<   |                     |           d
S )a_  Update the field provisionUSN in sam.ldb

    This field is used to track range of USN modified by provision and
    upgradeprovision.
    This value is used afterward by next provision to figure out if
    the field have been modified since last provision.

    :param samdb: An LDB object connect to sam.ldb
    :param low: The lowest USN modified by this upgrade
    :param high: The highest USN modified by this upgrade
    :param id: The invocation id of the samba's dc
    :param replace: A boolean indicating if the range should replace any
                    existing one or appended (default)
    
@PROVISIONr   )r   r   r   r   ;r   zprovisionnerID=*provisionnerIDr   N)r   r   r   LAST_PROVISION_USN_ATTRIBUTErer   appendMessager   r   MessageElementFLAG_MOD_REPLACEr   FLAG_MOD_ADDmodify)	rV   lowhighidr   tabentryedeltas	            rb   update_provision_usnr   V  s     C ,#&>$@$#G  I I q67 	 	A9S#a&&)) +"1vvvvrr*JJs1vvJJSSS$$$+,,,KMMEve\**EH3/7	9 	9 

&' LL$6*#. 01  3 3E 5zzQ#eAh--1,,"%"4R9IK["\"\	LLrd   c                 "   g }|                     |d|d|           t          j                    }t          j        | d          |_        t          j        |t          j        t                    |t          <   |                     |           dS )a  Set the field provisionUSN in sam.ldb
    This field is used to track range of USN modified by provision and
    upgradeprovision.
    This value is used afterward by next provision to figure out if
    the field have been modified since last provision.

    :param samdb: An LDB object connect to sam.ldb
    :param low: The lowest USN modified by this upgrade
    :param high: The highest USN modified by this upgrade
    :param id: The invocationId of the provisionr   r   r   N)	r   r   r   r   r   r   r   r   add)rV   r   r   r   r   r   s         rb   set_provision_usnr     s     CJJSSS$$$+,,,KMMEve\**EH3+7	9 	9 

&' 
IIerd   c                 l    |                      d|t          j        dgg d          }|d         d         S )a   This function return the biggest USN present in the provision

    :param samdb: A LDB object pointing to the sam.ldb
    :param basedn: A string containing the base DN of the provision
                    (ie. DC=foo, DC=bar)
    :return: The biggest USN in the provisionzobjectClass=*
uSNChanged)r   zserver_sort:1:1:uSNChangedzpaged_results:1:1)r   r   r   r   r   r   )r   r   r   )rV   r   r   s      rb   get_max_usnr     sJ     ,,/ .|n!6 !6 !6  7 7C
 q6,rd   c                    	 |                      dt          z  dt          j        t          dg          }n8# t          j        $ r&}|j        \  }}|t          j        k    rY d}~dS  d}~ww xY wt          |          dk    rMg }i }t          j	        d          }|d         
                    d          r3|d         d         D ]$}|                    t          |                     %|d         t                   D ]}	t          |	                              d          }
t          |
          d	k    r	|
d
         }nd}t          |          dk    r||vrZ|                    |
d                   }|
                    |          g ||<   ||                             |d                    ||                             |d
                    |S dS )a  Get USNs ranges modified by a provision or an upgradeprovision

    :param sam: An LDB object pointing to the sam.ldb
    :return: a dictionary which keys are invocation id and values are an array
             of integer representing the different ranges
    z%s=*r   r   r   Nr   r   r      r   default)r   r   r   r   LdbErrorargsERR_NO_SUCH_OBJECTr   r   compiler   r   r   split)samr   e1ecodeemsgmyidsr   pr   rtab1r   tab2s                rb   get_last_provision_usnr    s   

f/K&K ,CN">@P!Q  S S <   C***44444	
 5zzA~~Jt8<<()) 	%1X./ % %SVV$$$$q67 	& 	&Aq66<<$$D4yyA~~!WE

Q2U??7747##Dyy}}$b	"IT!W%%%"IT!W%%%%ts   25 A*A%$A%%A*c                       e Zd ZdZd Zd ZdS )ProvisionResultzResult of a provision.

    :ivar server_role: The server role
    :ivar paths: ProvisionPaths instance
    :ivar domaindn: The domain dn, as string
    c                     d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        d S rN   )server_roler   ro   r   rV   idmapr   r|   adminpass_generatedr   backend_resultr`   s    rb   rc   zProvisionResult.__init__  sX    



#' "rd   c                    |                     d           | j        r|                     d| j                   |                     d| j                   |                     d| j        j                   |                     d| j        j                   |                     d| j        j                   |                     d| j                   | j	        r| j	        
                    |           dS dS )	z)Report this provision result to a logger.zMOnce the above files are installed, your Samba AD server will be ready to usezAdmin password:        %szServer Role:           %szHostname:              %szNetBIOS Domain:        %szDNS Domain:            %szDOMAIN SID:            %sN)infor  r   r  r   ry   rx   ru   r|   r  report_logger)ra   loggers     rb   r  zProvisionResult.report_logger  s    	 	 	 # 	EKK3T^DDD/1ABBB/1DEEE/1BCCC/1EFFF/@@@ 	6--f55555	6 	6rd   N)rf   rg   rh   __doc__rc   r  ri   rd   rb   r  r    s<         # # #6 6 6 6 6rd   r  c                 j    |D ]}	  | |          c S # t           $ r Y w xY wt          d|z            )zFind a user or group from a list of possibilities.

    :param nssfn: NSS Function to try (should raise KeyError if not found)
    :param names: Names to check.
    :return: Value return by first names list.
    zUnable to find user/group in %r)KeyError)nssfnr   names      rb   findnssr     s`       	5;; 	 	 	D	
4u<
=
==s   

  c                 B    t          t          j        |           d         S Nr   )r   r   getpwnamr   s    rb   findnss_uidr%        3<''**rd   c                 B    t          t          j        |           d         S r"  )r   grpgetgrnamr$  s    rb   findnss_gidr*  	  r&  rd   c                     	 t          |           }nC# t          $ r6}|                    |           |                    d           d}Y d }~nd }~ww xY w|S )NzAssuming root user has UID zeror   )r%  r  r  )rootr  root_uidr   s       rb   get_root_uidr.    sm    t$$   A5666 Os    
A,AAc                    t                      }|                     d          |_        |                     d          |_        |                     d          |_        d|_        d|_        t          j        	                    |j        d          |_
        t          j        	                    |j        d          |_        t          j        	                    |j        d          |_        t          j        	                    |j        d	          |_        t          j        	                    |j        d
          |_        t          j        	                    |j        d          |_        t          j        	                    |j        d          |_        t          j        	                    |j        d          |_        t          j        	                    |j        d          |_        t          j        	                    |j        d          |_        t          j        	                    |j        d          |_        t          j        	                    |j        d          |_        t          j        	                    |j        d|dz             |_        t          j        	                    |j        d          |_        t          j        	                    |j        d          |_        t          j        	                    |j        d          |_        d|_        d|_        d|_        d|_        d|_        d|_        |                     dd          |_         |                     dd          |_!        | j"        |_#        |S ) ztSet the default paths for provisioning.

    :param lp: Loadparm context.
    :param dnsdomain: DNS Domain name
    private dirbinddns dirstate directoryz
dns.keytabsecrets.keytabz	share.ldbzsam.ldbz	idmap.ldbzsecrets.ldbzprivilege.ldbdns_update_listspn_update_list	krb5.confzkdc.confzwins.ldbldapizencrypted_secrets.keyr[   z.zonez
named.confznamed.conf.updatez	named.txtzhklm.ldbzhkcr.ldbzhkcu.ldbzhku.ldbzhkpd.ldbzhkpt.ldbpathsysvolnetlogon)$rL   r   r]   r^   r_   rZ   rY   osr8  joinrO   rV   rW   rX   	privileger4  r5  krb5confkdcconfr\   s4_ldapi_pathencrypted_secrets_key_pathr[   	namedconfnamedconf_updatenamedtxtrP   rR   rQ   rS   rT   rU   r9  r:  
configfiler{   )r   ru   r   s      rb   provision_paths_from_lprF    su    E}--E}--Eff.//EO $E#ELgll5#4kBBEO',,u0)<<EKGLL!2K@@EMGLL!2MBBEMgll5#4oFFEOGLL):<MNNEGLL):<MNNEW\\%"3[AAENGLL!2J??EM7<< 1:>>EL',,u'8'BBE')w||(! (!E$ U.y77JKKEIgll5#4lCCEOW\\%*;=PQQEW\\%"3[AAENEJEJEJEIEJEJ66&(++ELVVFJ//ENMEMLrd   c                     d                     d | D                       }|dt                                                   S )z)Determine a netbios name from a hostname.r   c                 0    g | ]}t          |          |S ri   )r   ).0xs     rb   
<listcomp>z*determine_netbios_name.<locals>.<listcomp>J  s&    KKK2G2J2JK1KKKrd   N)r<  r   r   )ry   rw   s     rb   determine_netbios_namerL  G  sB     ''KKhKKKLLK,,,-33555rd   c           	      z   |,t          j                                        d          d         }|                     d          }|t	          |          }|                                }t          |          st          |          |4|                     d          }||dk    rt          d| j	        z            |
                                }|.|                     d          }|t          d	| j	        z            |
                                }|                                }|                     d          dk    rt          d
| j	        z            |                     d                                          |k    rCt          d|                     d                                          d| j	        d|d          |                     d          
                                |k    r1t          d|                     d          d| j	        d|d          |dk    r||                     d          }|                                }|                     d                                          |k    rCt          d|                     d                                          d|d| j	        d          |t          j        |          }||k    rt          d|d|d          n	|}|d|z   }t          |          st          |          |                                |k    rt          d|d|d          |                                |k    rt          d|d|d          ||k    r|st          d|d|d          |dk    r|}|
                                }||}|d|z   }|d |z   }|
t          }
t                      }||_        ||_        ||_        ||_        d!|z   |_        ||_        ||_        ||_        ||_        ||_        |
|_        d"|d#|
d$||_        |S )%z$Guess configuration settings to use.Nr   r   netbios namerv   r   z2guess_names: 'realm' not specified in supplied %s!server rolez8guess_names: 'server role' not specified in supplied %s!zwguess_names: 'realm =' was not specified in supplied %s.  Please remove the smb.conf file and let provision generate itzguess_names: 'realm=z' in z must match chosen realm 'zA'!  Please remove the smb.conf file and let provision generate itzguess_names: 'server role=z  must match chosen server role '"active directory domain controllerr   zguess_names: Workgroup 'z(' in smb.conf must match chosen domain 'z'!  Please remove the z# file and let provision generate itzguess_names: Domain 'z(' must not be equal to short host name 'z'!zDC=zguess_names: Realm 'z!' must not be equal to hostname 'z)' must not be equal to NetBIOS hostname 'z*' must not be equal to short domain name 'zCN=Configuration,z
CN=Schema,zCN=Manager,zCN=z,CN=Servers,CN=z
,CN=Sites,)socketgethostnamer  r   rL  r   r   InvalidNetbiosNamer   rE  r   r   r   DEFAULTSITErk   rn   ro   rp   rq   rt   ru   rx   rv   rw   ry   rz   r   )r   ry   rx   ru   
serverrolern   ro   rp   rq   r   rz   domain_names_forcedrw   rv   r   s                  rb   guess_namesrW  N  s    %''--c2215&&((K,X66##%%Kk** . ---FF7OO		R#D   !!IVVM**
#$^acan$nooo!!##JOOE	vvg"  !Z  ]_  ]j  !j  k  k  	k	vvg%''  ac  ag  ag  ho  ap  ap  av  av  ax  ax  ax  ax  z|  zG  zG  zG  IN  IN  IN  !O  P  P  	P	vvm""$$
22  mo  ms  ms  tA  mB  mB  mB  mB  DF  DQ  DQ  DQ  S]  S]  S]  !^  _  _  	_999>VVK((F66+$$&&&00##  jl  jp  jp  q|  j}  j}  jC  jC  jE  jE  jE  jE  GM  GM  GM  OQ  O\  O\  O\  %]  ^  ^  ^-i88H[  ##msmsms  vA  vA  vA  %B  C  C  C ! {*Hf%% ) (((~~5  afafafhphphp qrrre##inininp{p{p{ |}}}2jojojoqwqwqw xyyy999 %%''	~&/(*EELENENEN'&0EEOELEK#EENENNXXXxx)EN Lrd   c
           	         | J |,t          j                                        d          d         }t          |          }
|d}|J |                                }|J |                                }|
|||d}|t
          j                                        }t          j	        
                    |           r|                    |            |	+|	D ](}|	|         d                    |	|                   ||<   )|t          j	                            t          j	                            |d                    |d<   t          j	                            |          |d	<   t          j	                            t          j	                            |d
                    |d<   t          j	                            t          j	                            |d                    |d<   t          j	                            t          j	                            |d                    |d<   |                    d	t          j	                            |                     |                    d|d                    |                    d|d                    |                    d|d                    |r|r|st          j	                            |d          }|                    dt          j	                            t          j	                            |d                               nk|                    d          sf|                    d          }|                    dt          j	                            t          j	                            |d                               n|rt          j	                            |d
          }|                    dt          j	                            t          j	                            |d                               n{|                    d          sf|                    d          }|                    dt          j	                            t          j	                            |d                               i }|dk    rst          j	                            |                    d          d          |d<   t          j	                            |d         |                                d          |d<   nd|d<   t#          | d          }	 |                    d           |                                D ]!\  }}|                    d|d|d           "|                    d           |                                D ]_\  }}|                    d|z             |                    d |z             |                    d!           |                    d           `	 |                                 n# |                                 w xY w|                    |            |                    d"|            dS )#zDCreate a new smb.conf file based on a couple of basic settings.
    Nr   r   standalone server)rN  r   rv   rO   privater0  zlock dirstater2  cachezcache directoryzbind-dnsr1  z
posix:eadbzeadb.tdbzxattr_tdb:filez	xattr.tdbrP  r9  scriptsr:  
samba_dsdbpassdb backendwz
[globals]
	z = 
z[%s]
z	path = %s
z	read only = no
F)rQ  rR  r  rL  r   r   r   LoadParmr;  r8  existsloadr<  abspathsetr   r   openwriteitemsclosedump)r{   ry   rx   rv   	targetdirrU  eadb	use_ntvfsr   global_paramrw   global_settingsentprivdirstatedirsharesfkeyvalr  r8  s                        rb   make_smbconfrz    s   
 %''--c2215(22K(
\\^^FKKMME $!	 O 
z[!!##	w~~g 
 	C 	CCC ,'*xxS0A'B'B$)+iQZ9[9[)\)\&&(gooi&@&@
#-/W__RW\\)U\=]=]-^-^)*-/W__RW\\)U\=]=]-^-^)*)+iQ[9\9\)])]&
z27??955666
 /2C"DEEE
 /2C"DEEE
}om<=== M 	M$',,y)<<|wrw||GZ'H'HIIK K K KVVL)) K&&//|wrw||GZ'H'HIIK K K $7<<	7;;'wrw||Hk'J'JKKM M M MVV,-- M66"344'wrw||Hk'J'JKKM M M F9997<</@(A(A8LLxW\\&*:EKKMM*35 5z -9()WcA	'--// 	0 	0HCGGGSSS###.////	 ,,.. 	 	JD$GGHtO$$$GGOd*+++GG()))GGDMMMM		 	
								GGG
 GGE7s    CX
 
X c                     |                      d| j        |           |                      |dz   | j        |           |                      |dz   | j        |           dS )a  setup reasonable name mappings for sam names to unix names.

    :param samdb: SamDB object.
    :param idmap: IDmap db object.
    :param sid: The domain sid.
    :param domaindn: The domain DN.
    :param root_uid: uid of the UNIX root user.
    :param nobody_uid: uid of the UNIX nobody user.
    :param users_gid: gid of the UNIX users group.
    :param root_gid: gid of the UNIX root group.
    zS-1-5-7z-500z-513N)setup_name_mappingTYPE_UIDTYPE_GID)r  sidr-  
nobody_uid	users_gidr   s         rb   setup_name_mappingsr  )  s`     
Y
CCC	S6\5>8DDD	S6\5>9EEEEErd   c                    |J 	 t          j        |            n# t          $ r Y nw xY wt          | ||dg          }d}|j        dk    r
d|j        z  }d}|sd}|	t                      }	d|	z  }|	d	k    r||d
z  }nd}|dz  }|d}|                                 	 |                    d           t          |t          d          ||d           t          |t          d          |j        ||d           |                    d           t          ||           |                                 dS #  |                                  xY w)ak  Setup the partitions for the SAM database.

    Alternatively, provision() may call this, and then populate the database.

    :note: This will wipe the Sam Database!

    :note: This function always removes the local SAM LDB file. The erase
        parameter controls whether to erase the existing data, which
        may not be stored locally but in LDAP.

    Nzmodules:)urlsession_infor   optionsz# No LDAP backendr   zldapBackend: %sz"requiredFeatures: encryptedSecretszbackendStore: %smdbrc  r   zrequiredFeatures: lmdbLevelOnez# No required featuresz*Setting up sam.ldb partitions and settingszprovision_partitions.ldif)LDAP_BACKEND_LINEBACKEND_STOREzprovision_init.ldif)BACKEND_TYPESERVER_ROLEREQUIRED_FEATURESzSetting up sam.ldb rootDSE)r;  unlinkOSErrorr   r   ldap_urirH   transaction_startr  r:   r9   setup_samdb_rootdsetransaction_committransaction_cancel)
samdb_pathr  r   r  provision_backendr   rU  eraseplaintext_secretsbackend_storebackend_store_sizerV   ldap_backend_linerequired_featuresbackend_store_lines                  rb   setup_samdb_partitionsr  <  s    ###

	*    J\
|- - -E ,&&-0A0JJ A@133+m;(% "== 4	#@AAAuj)DEE%6!3H
 H
 	 	 	
 	uj)>?? 1 6)%6B B 	 	 	 	0111E5)))
 	  """""	  """s    
((BD7 7Er   c
                 N   g d}
|B||                                 }|                                 d|                                 }nd}|                                 }t          j        t          j        | d|z                      }t	          |	          g|d<   ddg|d<   |Dg d	|d<   |g|d
<   d|d|                                g|d<   t	          |          g|d<   dg|d<   |                    d          g|d<   d|z  g|d<   t	          |	          g|d<   |t          |          g|d<   |                     d|
d|d|dt	          |          dt	          |j	                  d	t          j
                  }|D ]}|                     |j	                   |                     |j	        |
t          j                  }t          |          dk    r|d         d         d         g|d <   	 |d         d!         d         g|d"<   n# t          $ r Y nw xY w	 |d         d         d         g|d<   n# t          $ r Y nw xY w	 |d         d#         d         g|d#<   n# t          $ r Y nw xY w|D ]-}|d$k    r%||                             t          j                   .|                     |           |                     |d         j	        |j	                   dS d%|z  g}|	t&          k    r||                    d%|z  g           ||d&<   |                     |           dS )'zAdd domain join-specific bits to a secrets database.

    :param secretsdb: Ldb Handle to the secrets database
    :param machinepass: Machine password
    )whenChangedsecretpriorSecretpriorChanged
krb5KeytabprivateKeytabNr   zflatname=%s,cn=Primary DomainssecureChannelTypetopprimaryDomainobjectClass)r  r  kerberosSecretrv   zhost/@saltPrincipalzmsDS-KeyVersionNumberr3  r  utf-8r  z%s$samAccountNamer   zcn=Primary Domainsz(&(|(flatname=z)(realm=z)(objectSid=z2))(objectclass=primaryDomain)(!(distinguishedName=z)))r   r   r   r   )r   r   r   r   r   r  r  priorWhenChangedr  r   zHOST/%sservicePrincipalName)r   r   r   r   r   r   encoder"   r   r   r   deleter   r   r  	set_flagsr   r   renamer   extendr   )r   rx   rw   machinepassr|   rv   ru   keytab_pathkey_version_numbersecure_channel_typer   dnsname	shortnamemsgr   del_msgelspns                     rb   secretsdb_self_joinr    s8     E I(..0000)//2C2C2CD!!##I +cfY(H6(QRR
S
SC #$7 8 89C1CGGGMwG07 GHO(+,>(?(?'@#$ 01O ''001CM"[01C #$7 8 89C$Y//0K 

 4EE MS  MS  MS  UZ  UZ  UZ  \_  `i  \j  \j  \j  \j  lo  ps  pv  lw  lw  lw  lw  (x!$!3  5 5C  % %$$$$


e3>

J
JC
3xx1}}!!fX.q12M	'*1vm'<Q'?&@C"## 	 	 	D		$'F?$;A$>#?C   	 	 	D		!$Q!5a!8 9C 	 	 	D	  	8 	8BTzzB!!#"6777QCF+++++9$%,..73F JJ	G+,---&)"#cs6   5H 
HHH8 8
II	I" "
I/.I/c                    t           j                            | j                  rt          j        | j                   t           j                            | j        | j                  }t           j                            |          rt          j        |           t           j                            | j        | j	                  }t           j                            |          rt          j        |           t           j                            | j        | j	                  }t           j                            |          rt          j        |           | j        }t          |||          }|                                 |                    t          d                     t          |||          }|                                 	 |                    t          d                     n#  |                                  xY w|S )ar  Setup the secrets database.

    :note: This function does not handle exceptions and transaction on purpose,
       it's up to the caller to do this job.

    :param path: Path to the secrets database.
    :param session_info: Session info.
    :param credentials: Credentials
    :param lp: Loadparm context
    :return: LDB handle for the created secrets database
    r  r   zsecrets_init.ldifzsecrets.ldif)r;  r8  re  rX   r  r<  r]   rY   r^   rZ   r   r  load_ldif_file_addr9   r  r  )r   r  r   r  bind_dns_keytab_pathdns_keytab_pathr8  secrets_ldbs           rb   setup_secretsdbr    s    
w~~em$$ !
	%-   ',,u0%,??K	w~~k"" 
	+7<<(95;KLL	w~~*++ (
	&'''gll5#4e6FGGO	w~~o&& #
	/"""=Dd"===K"":.A#B#BCCCd"===K!!###&&z.'A'ABBBB&&(((s   "G. .Hc                     t           j                            |           rt          j        |            t	          | ||          }|                                 |                    t          d                     dS )zSetup the privileges database.

    :param path: Path to the privileges database.
    :param session_info: Session info.
    :param credentials: Credentials
    :param lp: Loadparm context
    :return: LDB handle for the created secrets database
    r  zprovision_privilege.ldifN)r;  r8  re  r  r   r  r  r9   )r8  r  r   privilege_ldbs       rb   setup_privilegesr  	  sp     
w~~d 
	$<B???M$$Z0J%K%KLLLLLrd   c                 J   t           j                            |           rt          j        |            t           j        t           j        z  t           j        z  }t          j        t          j	        z  }t          j
        d          }	 t          j        | ||          }t          j
        |           n# t          j
        |           w xY wt          j        |d          5 }t          j        d          }|                    |           ddd           dS # 1 swxY w Y   dS )zSetup the encrypted secrets key file.

    Any existing key file will be deleted and a new random key generated.

    :param path: Path to the secrets key file.

    r   wb   N)r;  r8  re  r  O_WRONLYO_CREATO_EXCLstatS_IRUSRS_IWUSRumaskri  fdopenr   generate_random_bytesrj  )r8  flagsmodeumask_originalfdrw  rx  s          rb   setup_encrypted_secrets_keyr    s*    
w~~d 
	$K"*$ry0E<$,&DXa[[N!WT5$''
        	2t		 )"--	                 s   B3 3C	!*DDDc                 Z   t           j                                        }t           j                            | ||          }|                    |t           j        j                   t          d          }t          j        	                    |          sJ |
                    |           dS )zSetup the registry.

    :param path: Path to the registry database
    :param session_info: Session information
    :param credentials: Credentials
    :param lp: Loadparm context
    )r  lp_ctxzprovision.regN)r   registryRegistryopen_ldb
mount_hiveHKEY_LOCAL_MACHINEr9   r;  r8  re  
diff_apply)r8  r  r   reghiveprovision_regs         rb   setup_registryr  2  s     .
!
!
#
#C>""4l2"NNDNN4:;;;//M7>>-(((((NN=!!!!!rd   c                     t           j                            |           rt          j        |            t	          | ||          }|                                 |                    t          d                     |S )zSetup the idmap database.

    :param path: path to the idmap database
    :param session_info: Session information
    :param credentials: Credentials
    :param lp: Loadparm context
    r  zidmap_init.ldif)r;  r8  re  r  r   r  r  r9   )r8  r  r   	idmap_ldbs       rb   setup_idmapdbr  B  sn     
w~~d 
	$<B???IOO  ,=!>!>???rd   c           
          t          | t          d          |j        |j        |j        |j        |j        d           dS )zDSetup the SamDB rootdse.

    :param samdb: Sam Database handle
    zprovision_rootdse_add.ldif)SCHEMADNDOMAINDNROOTDNCONFIGDNSERVERDNN)r:   r9   rq   ro   rn   rp   r   )rV   r   s     rb   r  r  S  sR    
 5*%ABBNN,NNE E     rd   c                    t          |	t                    sJ |d|z  }nd}||}t          | t          d          |j        |j        |j        |j        |	|j        |j	        d|j
        t          |                    d                                        d          t          |          t          |          t          |t          |          t          |dz             t          |dz   d	z             d
           t          | t          d          |
||j
        |j        d           |t          k    rt          | t          d          |j        |j        |j        |j        |	|j        |j	        d|j
        t          |                    d                                        d          t          |          t          |          t          |t          |          d           t!          | t          d          |j        |j        dddg           t!          | t          d          |j        |j        |j        |j        d           t%                      }|                     |           t!          | t          d          |j        |j        |j        d           |                     |           |dk    rt          | t          d          |j
        |j        t          |                    d                                        d          |j	        |j                                        d|j
                                        d           dS dS )zJoin a host to its own domain.NzobjectGUID: %s
r   zprovision_self_join.ldifr   	utf-16-ler   d   i  )r  r  r  r  INVOCATIONIDNETBIOSNAMEDNSNAMEMACHINEPASS_B64	DOMAINSIDDCRIDSAMBA_VERSION_STRINGNTDSGUIDDOMAIN_CONTROLLER_FUNCTIONALITYRIDALLOCATIONSTARTRIDALLOCATIONENDzprovision_group_policy.ldif)
POLICYGUIDPOLICYGUID_DC	DNSDOMAINr  zprovision_self_join_config.ldif)r  r  r  r  r  r  r  r  r  r  r  r  r  z&provision_self_join_modify_schema.ldif)r  r  provision:0relax:0r   z&provision_self_join_modify_config.ldif)r  rT  r  r  zprovision_self_join_modify.ldif)r  r  r  r   zprovision_dns_add_samba.ldif)r  r  DNSPASS_B64HOSTNAMEr  )
isinstancer   r:   r9   rp   rq   ro   r   rw   ry   ru   r   r  r   r   r<   r;   rz   r   set_session_infor   )rV   admin_session_infor   fillr  r   dnspassr|   next_ridinvocationid
policyguidpolicyguid_dcdomainControllerFunctionalityr   dc_ridntdsguid_linesystem_session_infos                    rb   setup_self_joinr  a  s   
 lC(((((*X5~5*%?@@....*".$)NNNEOOD!*;+=+=k+J+J!K!K!R!RSY!Z!Zy>>6{{&-'14/21 21$'3$7$7"%hns&:";";!C= C= > > >$ 5*%BCC&, ?.	F* F* + + + yuj)JKK!N!N!N!N ,$0&+nnneooF#,[-?-?-L-L#M#M#T#TU[#\#\ ^^V(/)36143 43N4 N4 	5 	5 	5" 	%$%MNN*/.*/.Q Q %29#=	? 	? 	? 	? 	%$%MNN*/.-2^-2->*/.	Q Q	 	 	 )**	./// eZ(IJJ..".M M    
-...&&& 	uj)GHH ?.&w~~k'B'BCCJJ6RR.#))++++U_-B-B-D-D-DFK K 	 	 	 	 	 '&rd   c                 l    |d         dk    rd|z  }t           j                            | |d|          }|S )a  Return the physical path of policy given its guid.

    :param sysvolpath: Path to the sysvol folder
    :param dnsdomain: DNS name of the AD domain
    :param guid: The GUID of the policy
    :return: A string with the complete path to the policy folder
    r   r   z{%s}Policies)r;  r8  r<  )
sysvolpathru   guidpolicy_paths       rb   getpolicypathr    s9     Aw#~~}',,z9j$GGKrd   c                    t           j                            |           st          j        | d           t	          t           j                            | d          d          }	 |                    d           |                                 n# |                                 w xY wt           j                            | d          }t           j                            |          st          j        |d           t           j                            | d          }t           j                            |          st          j        |d           d S d S )N  zGPT.INIra  z[General]
Version=0MACHINEUSER)r;  r8  re  makedirsri  r<  rj  rl  )r  rw  r  s      rb   create_gpo_structr     s   7>>+&& (
K'''RW\\+y11377A	()))									
[),,A7>>! 
Au
[&))A7>>! 
Au s   $B B$c                     t          | ||          }t          |           t          | ||          }t          |           dS )a  Create the default GPO for a domain

    :param sysvolpath: Physical path for the sysvol folder
    :param dnsdomain: DNS domain name of the AD domain
    :param policyguid: GUID of the default domain policy
    :param policyguid_dc: GUID of the default domain controler policy
    N)r  r   )r  ru   r  r  r  s        rb   create_default_gpor"    sH      
IzBBKk"""
I}EEKk"""""rd   l        c                    t          | |||||||
||
  
         t          }|r|}g }|dk    r%|                    dt          |          z              |r|                    d           |r:t	          |dz            dz   }|                    dt          |          z              t          |dd	|d	|	|
          }|                    d           |                    |d	           |                    d|j	        z             	 |
                    | |           nD# t          j        $ r2}|j        \  }}|t          j        k    rt          d| z             d}~ww xY w|                    |d           |S )zZSetup a complete SAM Database.

    :note: This will wipe the main SAM database file!
    )	r  r   r  r  r   rU  r  r  r  r  zlmdb_env_size:zbatch_mode:1i  r   ztransaction_index_cache_size:NF)r  r  auto_connectr   global_schemaam_rodcr  z%Pre-loading the Samba 4 and AD schema)write_indices_and_attributesr   )r  z<Permission denied connecting to %s, are you running as root?T)r  DEFAULT_BACKEND_SIZEr   r   r   rE   r  
set_schemaset_ntds_settings_dnr   connectr   r  r  ERR_INSUFFICIENT_ACCESS_RIGHTSr   )r8  r  r  r   r   r  r
  rU  schemar&  r  r  r  
batch_mode
store_sizer  
cache_sizerV   e2numstring_errors                        rb   setup_samdbr4    s    42->\!&:Qb)6.@	B B B B &J ('
G'#j//9::: '~&&& J e+,,q0
6ZHIII |E %wI I IE KK7888 
V%@@@ 
4u~EFFFdG,,,,<    gl3555#$bei$ijjj 
V$???Ls   D E,-EEc                 j   |d}|dk     s|dk    rd|z  }|ddz  z  }t          |          t          }|t          }||k    rt          d          |}|}|                     d|j        z             |                     d|           |                     d	|           |                     d
|           |                     t          |j                             |                     |           |	                    d|j
        z             t          |t          |j                            }|                     |           |j        d|j        z  }nd}t          t          |j                                                d          }t#          | t%          d          |j
        t          |j                  ||d           t'          | t%          d          |j
        t          t)          j        t-          t/          j                                                  t          |          |j        |j        |t          |          t4          t          t6                    d	           |t8          k    r,|	                    d           t          t;          |j                                                d          }t#          | t%          d          |j        |d           dt(          j        j        z  }dd|g}|	                    d           |                      |j!        |           | "                    |j#        |           | $                                 |                      |j%        |           t#          | t%          d          d|j&        i|           tO          j(        tO          j)        | |j
                            }tO          j*        |j        tN          j+        d          |d<   || _,        |t8          k    r|	                    d           t          t[          |j                                                d          } t          t]          |j                                                d          }!t          t_          |j                                                d          }"t          ta          |j                                                d          }#t          tc          |j                                                d          }$t          te          |j                                                d          }%d|j3        v rd }&nd}&t#          | t%          d!          i d"|j        d#|j4        d$|j        d%|j5        d&|j6        d|j&        d'|j
        d(|j        d)t          |          d*t          |          d+|"d,|$d-|#d.|$d/|$d0|%d1| d2|!i           t#          | t%          d3          |j        |&d4           |	                    d5           to          t%          d6                    }'tq          |'d"|j        i          }'ts          |'           |                      |'           |	                    d7           t'          | t%          d8          |j        |%d9           |	                    d:           t          tu          |j                                                d          }(t#          | t%          d;          |j
        |(d<           |	                    d=           t'          | t%          d>          d'|j
        i           |	                    d?           t          tw          |j                                                d          })t#          | t%          d@          |j
        |)dA           |	                    dB           t'          | t%          dC          d'|j
        i           |	                    dD           t          ty          |j                                                d          }*t          t{          |j                                                d          }+t          t}          |j                                                d          },t          t          |j                                                d          }-t          t          |j                                                d          }.t#          | t%          dE          t          t)          j        t-          t/          j                                                  |j
        |j4        |j        |j        |j        t          |dFz             ||*|+|,|-|.dG           |t8          k    rt          t          |j                                                d          }/t'          | t%          dH          |j        |j&        dI           |	                    dJ           t          tc          |j                                                d          }$t#          | t%          dK          |j        |$dLddg           |t8          k    s|t          k    rxt'          | t%          dM          |j
        |/dN           |	                    dO           t#          | t%          dP          |j
        t          |j                  t          |C                    dQ                                        d          t          |C                    dQ                                        d          dRddg           |	                    dS           t          | |||||
||	|j        ||||||T           d|j        z  }0| E                    |0dUdtN          jF        V                              d          |_G        t          |jG        t                    sJ | S )WN   ʚ;z/You want to run SAMBA 4 with a next_rid of %u, z,the valid range is %u-%u. The default is %u.)r6  r7  r6  zYou want to run SAMBA 4 on a domain and forest function level which itself is higher than its actual DC function level (2008_R2). This won't work!r   domainFunctionalityforestFunctionalityr  zAdding DomainDN: %szobjectGUID: %s
-r   r   zprovision_basedn.ldif)r  r  
DESCRIPTOR
DOMAINGUIDzprovision_basedn_modify.ldif)	r  	CREATTIMENEXTRIDrT  r  r  DOMAIN_FUNCTIONALITYr  MIN_PWD_LENGTHzAdding configuration containerz#provision_configuration_basedn.ldif)r  r:  zlocal_oid:%s:0r  r  zSetting up sam.ldb schemar  zaggregate_schema.ldifr  subRefsz%Setting up sam.ldb configuration data2008#zprovision_configuration.ldifr  r  rT  r  DOMAINr  r  FOREST_FUNCTIONALITYr>  NTDSQUOTAS_DESCRIPTORLOSTANDFOUND_DESCRIPTORSERVICES_DESCRIPTORPHYSICALLOCATIONS_DESCRIPTORFORESTUPDATES_DESCRIPTOREXTENDEDRIGHTS_DESCRIPTORPARTITIONS_DESCRIPTORSITES_DESCRIPTORzextended-rights.ldif)r  INC2012zSetting up display specifiersz1display-specifiers/DisplaySpecifiers-Win2k8R2.txtz0Modifying display specifiers and extended rightsz#provision_configuration_modify.ldif)r  DISPLAYSPECIFIERS_DESCRIPTORzAdding users containerzprovision_users_add.ldif)r  USERS_DESCRIPTORzModifying users containerzprovision_users_modify.ldifzAdding computers containerzprovision_computers_add.ldif)r  COMPUTERS_DESCRIPTORzModifying computers containerzprovision_computers_modify.ldifzSetting up sam.ldb datazprovision.ldifiX  )r<  r  r  rT  r  r  RIDAVAILABLESTARTr   INFRASTRUCTURE_DESCRIPTORrF  SYSTEM_DESCRIPTORBUILTIN_DESCRIPTORDOMAIN_CONTROLLERS_DESCRIPTORz'provision_configuration_references.ldif)r  r  z)Setting up well known security principalsz#provision_well_known_sec_princ.ldif)r  WELLKNOWNPRINCIPALS_DESCRIPTORz provision_basedn_references.ldif)r  MANAGEDSERVICE_DESCRIPTORz#Setting up sam.ldb users and groupszprovision_users.ldifr  )r  r  ADMINPASS_B64KRBTGTPASS_B64zSetting up self join)r   r
  r  r   r  r  r|   r  r  r  r  r  r   r   )r   	attributer   r   )Ir   r   r*  r   set_opaque_integerset_domain_sidr   r|   set_invocation_idr  ro   r   r  r~   r   r-   r   r:   r9   r;   r   unix2nttimer   timerz   rp   r   DEFAULT_MIN_PWD_LENGTHr<   r&   dsdb&DSDB_CONTROL_SKIP_DUPLICATES_CHECK_OIDadd_ldifschema_dn_addmodify_ldifschema_dn_modifywrite_prefixes_from_schemaschema_datarq   r   r   r   r   r   invocation_idr'   r(   r)   r*   r+   r,   base_schemarw   ru   rx   r   r   r   r1   r0   r.   r4   r3   r/   r2   r8   r=   r  r  	searchoner   r   r  )1rV   r   r   r  r  r  r
  r   
krbtgtpassr  r   r  r  r   rU  r&  dom_for_fun_levelr-  r  r  r  r  errorr  r8  r9  r	  domainguid_linedescrignore_checks_oidschema_controlsr  partitions_descrsites_descrntdsquotas_descrprotected1_descrprotected1wd_descrprotected2_descr	incl_2012display_specifiers_ldif
users_desccomputers_descinfrastructure_desclostandfound_descsystem_descbuiltin_desccontrollers_descmanagedservice_descrntds_dns1                                                    rb   
fill_samdbr  5  s    
 $(Z//AXN? C$ $ 	$&&& %?! 6888  !u  v  v  	v++ 
4u~EFFF 
24GHHH	24GHHH	<:< < < 
U_--...	L)))
KK%6777 'r3u+?+?@@	-...#-0@@+EO<<==DDVLLE5*%<==U_--)	@ @    eZ(FGGN*3ty{{+;+;<<==x==~N  #$7 8 8 '455
J 
J 
 
 
 y4555/@@AAHHPPuj)NOO!N#R R 	 	 	 -uz/``
 	/000v+oFFF&1OLLL((***v)ODDDuj)@AA"EN3 /	1 	1 	1 	1
 +cfUEN33
4
4C'8H(13 3C	N 'E y;<<<$%Eeo%V%VWW^^_eff ;EO L LMMTTU[\\$%Fu%W%WXX__`fgg$%LU_%]%]^^eeflmm&'PQVQ`'a'abbiijpqq$%LU_%]%]^^eeflmmV'''IIIuj)GHH KENKu0K u~K U_	K
 %,K ENK ENK ENK ',?(@(@K ',?(@(@K ()9K *+=K &'7K /0BK +,>K  ,-=!K" ()9#K$ #K%K K 	 	 	* 	uj)?@@!N$C C 	 	 	
 	3444".JKK#M #M"01H2<en1M#O #O5666.///FGGG%$%JKK*/.>NN N	 	 	 KK()))6uGGHHOOPVWWJ5*%?@@ *C C    KK+,,,eZ(EFFI( ) ) )
KK,--->uOOPPWWX^__N5*%CDD$2G G    KK/000e !BCC$enF67 7 7 KK)***#$H$Y$YZZaabhii!"I%/"Z"Z[[bbcijjCEOTTUU\\]cddK:5?KKLLSSTZ[[L !B5?!S!STT[[\bcc5*%566*3ty{{+;+;<<==N(~NN C00&%8#4(*)99 9   " y()PQVQ`)a)abbiijpqq%$%NOO*/.*/.R: R:	; 	; 	;
 	?@@@&'PQVQ`'a'abbiijpqquj)NOO.@R
 R
 .	0 	0 	0 	0
 yDN22%$%GHH*/.;OK K	 	 	 	9:::uj)?@@U_--&y'7'7'D'DEELLVTT'
(9(9+(F(FGGNNvVV	C
 C

 .	0 	0 	0 	0 	*+++1T%1$/ '$/"'/!)%#-&36S!)	+ 	+ 	+ 	+ (%.83?BVYVd ) f fflflmsftft 	%.#.....Lrd   zkO:LAG:BAD:P(A;OICI;0x001f01ff;;;BA)(A;OICI;0x001200a9;;;SO)(A;OICI;0x001f01ff;;;SY)(A;OICI;0x001200a9;;;AU)zO:LAG:BAD:P(A;OICI;0x001f01ff;;;BA)(A;OICI;0x001200a9;;;SO)(A;OICI;0x001f01ff;;;SY)(A;OICI;0x001200a9;;;AU)(A;OICI;0x001301bf;;;PA)r9  c                 x   t                      }t          || ||||d||	  	         t          j        | d          D ]|\  }}	}
|
D ]8}t          |t          j                            ||          ||||d||	  	         9|	D ]8}t          |t          j                            ||          ||||d||	  	         9}d S )NTrp  skip_invalid_chownr
   serviceFtopdown)r   r   r;  walkr8  r<  )r8  aclr   domsidrp  r
   r  r  r,  dirsfilesr  s               rb   set_dir_aclr  B  s   &((LRsFLIZ^gmw~WT5999 c cdE 	c 	cDRdD113(T&Zac c c c c 	c 	cDRdD113(T&Zac c c c c	c	c crd   c                 4   t           j                            | |d          }t                      }	t	          ||t
          t          |          |	|d|t          	  	         |                    d|z  ddgdt          j
                  }
|
D ]}t          t          j        |d         d	                                                   }t          | |t          |d                             }t!          |t#          ||          |t          |          ||
           dS )n  Set ACL on the sysvol/<dnsname>/Policies folder and the policy
    folders beneath.

    :param sysvol: Physical path for the sysvol folder
    :param dnsdomain: The DNS name of the domain
    :param domainsid: The SID of the domain
    :param domaindn: The DN of the domain (ie. DC=...)
    :param samdb: An LDB object on the SAM db
    :param lp: an LP object
    r  Tr  CN=Policies,CN=System,%sr   nTSecurityDescriptorr   r  r   r
   N)r;  r8  r<  r   r   POLICIES_ACLr   SYSVOL_SERVICEr   r   r   r#   r   
descriptoras_sddlr  r  r!   )r9  ru   r|   ro   rV   r   rp  r
   root_policy_pathr  r   policyr  r  s                 rb   set_gpos_aclr  N  s2    w||FIzBB&((LR!<Y T&R`b b b b ,,6B"$:;"$C,>  @ @C  # #, 67:< <<CGII 	#FIs6$<7H7HIIKS)!<!<b	NNI!	# 	# 	# 	# 	#	# #rd   c
           
        	 d	st          j                    }
|
                    j                   t	          j        t          j                            |                    }	 	 t          j
        |j        dt                      |           n?# t          $ r2 t          j                    st          d          t          d          w xY w	 t          j        |j        ||t                                 n# t          $ r t          d          w xY w	 |                                 n# |                                 w xY wt          j                    }
|
                    j                   |
                    dd| j        z             t)          j                     t)          j        |
                    d                    t)          j                    k    r't          d	t)          j                    d
d                                          }|d         k    rt          d|d         d
d          |d                                         |                                k    r@t          d|d                                         d|                                d          	 	rt          j        |d|           d}n# t          $ r d}Y nw xY wd                    t8          j                  }t<          j        t<          j         z  t<          j!        z  }t=          j"        | ||          t=          j#        d||           	fd} ||           t          j$        |d          D ]\  }}}|D ]c}	r6|r4t          j        t          j        %                    ||          d|            |t          j        %                    ||                     d|D ]c}	r6|r4t          j        t          j        %                    ||          d|            |t          j        %                    ||                     dtM          |||| 	           dS )  Set the ACL for the sysvol share and the subfolders

    :param samdb: An LDB object on the SAM db
    :param netlogon: Physical path for the netlogon folder
    :param sysvol: Physical path for the sysvol folder
    :param uid: The UID of the "Administrator" user
    :param gid: The GID of the "Domain adminstrators" group
    :param domainsid: The SID of the domain
    :param dnsdomain: The DNS name of the domain
    :param domaindn: The DN of the domain (ie. DC=...)
    N)dir  zSamba was compiled without the posix ACL support that s3fs requires.  Try installing libacl1-dev or libacl-devel, then re-run configure and make.zYour filesystem or build does not support posix ACLs, which s3fs requires.  Try the mounting the filesystem with the 'acl' option.zUUnable to chown a file on your filesystem.  You may not be running provision as root.r`  samba_dsdb:%sSID as seen by smbd [6] does not match SID as seen by the provision script []!r   SID as seen by pdb_samba_dsdb [
dns_domain!Realm as seen by pdb_samba_dsdb [8] does not match Realm as seen by the provision script [TFz<SID={}-{}>)r  r   session_info_flagsAdministrator)r  	user_nameuidgidc                 b    t          | t          t                    dt          	  	        S )zA helper to reuse argsTr  )r   
SYSVOL_ACLr   r  )r8  r|   r   	s4_passdbr  rp  s    rb   	_setntaclzsetsysvolacl.<locals>._setntacl  s5    j#i..,D"$ $ $ 	$rd   r  r  )'s3paramget_contextrf  rE  tempfileNamedTemporaryFiler;  r8  rg  r	   set_simple_aclr  r   r  have_posix_aclsr   chownrl  rh  r  r
   reload_static_pdbPDBr   get_global_sam_siddomain_infor   formatr   r   r    AUTH_SESSION_INFO_DEFAULT_GROUPSAUTH_SESSION_INFO_AUTHENTICATED#AUTH_SESSION_INFO_SIMPLE_PRIVILEGESuser_sessionsession_info_set_unixr  r<  r  )rV   r:  r9  r  r  r|   ru   ro   r   rp  s3conffiler  canchownuserdnr  r  r,  r  r  r  r  r  s        `  ``           @@rb   setsysvolaclr  n  s    I /@$&&BM"""*rwv/F/FGGG	b#DIu6I6K6KSQQQQ 	b 	b 	b+-- { , -z { { { ( )a b b b	bU
49c30C0E0EFFFF U U U' )T U U UU G
 JJLLLLDJJLLLL $&&BM"""

#_uy%@AAA """ Jvzz*:;;<<	 $&&)33##  |B  |U  |W  |W  |W  |W  Yb  Yb  Yb  %c  d  d  d++--y!Y..##  FQ  R[  F\  F\  F\  ^g  ^g  ^g  %h  i  i  i|$**,,	0A0AAA##  JU  Vb  Jc  Ji  Ji  Jk  Jk  Jk  Jk  mv  m|  m|  m~  m~  m~  m~  %  @  @  @ 	&HVR%%%      !!)X-NOOF21256E $U2&8=? ? ?L|&()8#&#&	( ( ( ($ $ $ $ $ $ $ $ $ IfWVU;;; 0 0dE 	0 	0D <X <dD112s;;;Ibgll4..//// 	0 	0D <X <dD112s;;;Ibgll4..////	0 IxIV_``````sH   ,(B D1 <CD1 (C> =D1 >DD1 1E:K K$#K$c                     | rdS dS )NDBVFSri   )direct_db_accesss    rb   acl_typer    s     turd   c                    t                      }t          || ||t                    }|                    |          }||k    r(t	          t          |          d| d|d|d          t          j        | d          D ]\  }}	}
|
D ]}t          |t          j        	                    ||          ||t                    }|@t	          t          |          dt          j        	                    ||          d	          |                    |          }||k    rFt	          t          |          dt          j        	                    ||          d|d|d          |	D ]}t          |t          j        	                    ||          ||t                    }|@t	          t          |          dt          j        	                    ||          d	          |                    |          }||k    rFt	          t          |          dt          j        	                    ||          d|d|d          ݐd S )
Nr  r  z ACL on GPO directory rZ   does not match expected value z from GPO objectFr  z ACL on GPO file  not found!)
r   r    r  r  r   r  r;  r  r8  r<  )r8  r  r   r|   r  r  fsacl
fsacl_sddlr,  r  r  r  s               rb   check_dir_aclr    s   &((LR|>NXfgggEy))JSt|  ~N  uO  uO  uO  uO  QU  QU  QU  Wa  Wa  Wa  cf  cf  cf  !g  h  h  	hWT5999 D DdE 		 		DRdD!9!9<.>X X XE}')12B)C)C)C)C)+dD)A)A)A)A)C D D D y11JS  'w  AQ  xR  xR  xR  xR  TV  T[  T`  T`  ae  gk  Tl  Tl  Tl  Tl  nx  nx  nx  z}  z}  z}  )~       !  		D 		DDRdD!9!9<.>X X XE}'+34D+E+E+E+E+-7<<d+C+C+C+C)E F F F y11JS  '  }E  FV  }W  }W  }W  }W  Y[  Y`  Ye  Ye  fj  lp  Yq  Yq  Yq  Yq  s}  s}  s}  B  B  B  )C  D  D  D !		DD Drd   c           
         t           j                            | |d          }t                      }t	          ||||t
                    }	|	#t          dt          |          d|d          |	                    |          }
|
t          k    r(t          t          |          d|d|
d|	d	          |
                    d
|z  ddgdt          j                  }|D ]}t          t          j        |d         d                                                   }t!          | |t#          |d                             }t%          |t'          ||          |||           dS )r  r  r  NzDB ACL on policy root rZ  r  z ACL on policy root r   from provisionr  r   r  r   r  r   )r;  r8  r<  r   r    r  r   r  r  r  r   r   r   r#   r   r  r  r   r  r!   )r9  ru   r|   ro   rV   r   r  r  r  r  r  r   r  r  r  s                  rb   check_gpos_aclr    s    w||FIzBB&((LR)<&6P P PE}HUeLfLfLfLfhxhxhx yzzzy))J\!!qy  {K  rL  rL  rL  rL  N^  N^  N^  `j  `j  `j  lq  lq  lq  !r  s  s  	s
,,6B"$:;"$C,>  @ @C  3 3, 67:< <<CGII 	#FIs6$<7H7HIIk;sI#>#>!1	3 	3 	3 	3	3 3rd   c                 l   t          j                    }|                    |j                   |                    dd| j        z             t          j        |                    d                    }t          j	                    |k    r't          dt          j	                    d|d          |                                }	|	d         |k    rt          d|	d         d|d          |	d                                         |                                k    r@t          d	|	d                                         d
|                                d          t                      }
dD ]}t          j                            ||          |fD ]}t#          |||
|t$                    }|"t          t'          |          d|d          |                    |          }|t*          k    r-t          t'          |          d|d|dt*          d          t-          ||||| ||           dS )r  r`  r  r  r  r  r   r  r  r  r  )TFr  Nz ACL on sysvol directory r  rZ  r  r  )r  r  rf  rE  rh  r  r
   r  r   r  r   r  r   r   r;  r8  r<  r    r  r  r  r  r  )rV   r:  r9  r|   ru   ro   r   r  r  r  r  r  dir_pathr  r  s                  rb   checksysvolaclr  &  s[     ""F
KK
JJ59!<===
6::&67788I  ""i//w}  xQ  xS  xS  xS  xS  U^  U^  U^  !_  `  `  	`''))K9**  BM  NW  BX  BX  BX  Zc  Zc  Zc  !d  e  e  	e< &&((IOO,=,===  FQ  R^  F_  Fe  Fe  Fg  Fg  Fg  Fg  ir  ix  ix  iz  iz  iz  iz  !{  |  |  	| '((L) ) )fi88(C 	} 	}HR<JZdrsssE}'V^_oVpVpVpVprzrzrz({|||y11JZ'''  G  HX  Y  Y  Y  Y  [c  [c  [c  eo  eo  eo  q{  q{  q{  )|  }  }  } ( 	vy)Xub'	) 	) 	) 	)) )rd   c                     t          j        | |          }g }|D ]0}|                    d          dk    r|                    |           1|S )zreturn only IPv4 IPs:r  r   interface_ipsfindr   )r   all_interfacesipsretr   s        rb   interface_ips_v4r  X  sR    

b.
1
1C
C  66#;;"JJqMMMJrd   c                     t          j        | d          }g }|D ]0}|                    d          dk    r|                    |           1|S )zreturn only IPv6 IPsFr  r  r  )r   r  r  r   s       rb   interface_ips_v6r  b  sR    

b%
(
(C
C  66#;;"JJqMMMJrd   r6  c                 	   |t           }|                                }|t          }|                                }| t          t	          j                              }|t          j        dd          }|t          j        dd          }|t          j        dd          }| 	                                 	 t          | ||fi d|d|d|d|d|d	|d
|d|d|d|d|d|d|d|d|d|
d|d|d|} |dk    rt          |j        |j        ||           |                                  n#  |                                   xY w|dk    r|s<t!          | |j        |j        |j        |j        |j        |j        |j        ||
  
         n|                    d           t/          ||j        |j        |j        |j        |j        |t6                     t          t8                    }	 t;          j        t;          j        | |                      dd|j        z  t:          j!                  "                    d                              }t;          j#        |t:          j$        d          |d<   | %                    |           n7# t:          j&        $ r%} | j'        \  }!}"|!t:          j(        k    r Y d } ~ nd } ~ ww xY wtS          | |||||||	||||||            |                      | *                                d!"          "                    d          }tW          |t                    sJ tY          |           }#t[          | t          |j.                            }$|#t_          | d#|$|d$           nta          | d#|$|           |                    d%           tc          | te          d&          d'|j3        i           |                    d(           ti          | | d)d*d*d*+          }%| 	                                 	 d,D ]/}&|%5                    |&d-|j6        t:          j7        d.g/           0|%5                    d0|j        z  t:          j8        g d1/           |%5                    |j6        t:          j!        d2d3g/          d#k    rts          d4          	 |                                  d S #  |                                   xY w)5N      x   r  r-  r  r  r
  r   rl  r  r  r   r  r   rU  rm  r&  r  r  r  r  rP  zSetting acl on sysvol skipped)rx   rv   ru   rw   r|   r  r  distinguishedNamezsamAccountName=%s$)r   r   r   zmsDS-SupportedEncryptionTypes)elementsr  r  )hostiphostip6r   r  os_levelrn  
fill_levelr  r   )r   rZ  r   r   z2Setting up sam.ldb rootDSE marking as synchronizedzprovision_rootdse_modify.ldifr  zFixing provision GUIDsFT)samdb_schemaverbosefixyesquiet)z	CN=DomainzCN=Organizational-Personz
CN=ContactzCN=inetOrgPerson,defaultObjectCategory)DNr   r   zCN=IP Security,CN=System,%s)ipsecOwnersReferenceipsecFilterReferenceipsecISAKMPReferenceipsecNegotiationPolicyReferenceipsecNFAReferenceattributeId	governsIdzFDuplicate attributeId or governsId in schema. Must be fixed manually!!):r   r   r   r   uuiduuid4r    generate_random_machine_passwordgenerate_random_passwordr  r  r"  r9  ru   r  r  r  r:  r-  r   r|   ro   r  r  rx   rv   rw   r   r   r   r   r   rk  r   r   r   r   r   r  r  ERR_NO_SUCH_ATTRIBUTErA   get_default_basednr  r  r   rn   r   r   r;   r9   r   rF   check_databaserq   r   r   r   )'rV   r  r  r   r   r-  rn  
samdb_fillr  r  r  r  r   rl  r~   r  r  r  r  r   r   r  rU  rm  r&  r   rp  skip_sysvolaclr  r  kerberos_enctypesr  r   enumestrlastProvisionUSNsmaxUSNchk
schema_objs'                                          rb   provision_fillr  l  sX     (
!!##J.!''))M4:<<(( ;CEE
<S#FF0c::	#5"e 
B 
B 
BFF 
B"(&
B&0j
B@M
B !+

B 7@i
B MWJ
B )5	
B CN+	
B
 (3{
B
 =DG
B %-H
B :D
B .?->
B IP
B %-H
B 6<V
B *7
B /A.@
B ===u|U_j,. . . 	  """"	  """ 999  	9en%/Y8 8 8 8 KK7888K"'+(-(9U_(3	W 	W 	W 	W  ..	+cfU%*__5H@TW\Wh@h;>;L &5 &N &NNTfU[nn^ ^ _ _C 473E*#2F446 46 46C/0 LL| 	 	 	6LT4s000 10000	 	UKr6"G$/@(Z#0		2 	2 	2 	2 __E,D,D,F,F/; % = ==CVF^^ 	*c*****.u55EL 1 122F$UAv|Q????%FL999
KKDEEEeZ(GHH!5>24 4 4 KK()))
%eU$  C	# f 	@ 	@JZZZ"H%(^&=%>  @ @ @ @ 	;enL!$!3"7 "7 "7 	 	8 	8 	8 s7H%2K$@  B BEFG G#$lmmmG 	  """""	  """s3   7A(D4 4E2BJ KJ==KBR8 8SrY  member serverrP  )ROLE_STANDALONEROLE_DOMAIN_MEMBERROLE_DOMAIN_BDCROLE_DOMAIN_PDCdcmemberzdomain controllerrP  r  
standalonerY  c                 X    	 t           |          S # t          $ r t          |           w xY w)zSanitize a server role name.

    :param role: Server role
    :raise ValueError: If the role can not be interpreted
    :return: Sanitized server role (one of "member server",
        "active directory domain controller", "standalone server")
    )
_ROLES_MAPr  
ValueError)roles    rb   sanitize_server_roler    s;    $   s    )c                     |                                  	 |                     d           t          |t          d          |||d           |                                 dS #  |                                  xY w)ztCreate AD entries for the fake ypserver.

    This is needed for being able to manipulate posix attrs via ADUC.
    z"Setting up fake yp server settingszypServ30.ldif)r  r  	NISDOMAINN)r  r  r:   r9   r  r  r  rV   ro   rw   	nisdomainmaxuidmaxgids          rb   provision_fake_ypserverr#    s     
#8999uj99 &"<
 <
 	 	 	 	  """""	  """s   7A# #A:r  c                    t           j                            |           s_	 t          j        | |           d S # t          $ r:}|j        t
          j        fv rnt          d| d|j                  Y d }~d S d }~ww xY wd S )NzFailed to create directory z: )	r;  r8  re  mkdirr  errnoEEXISTr   strerror)r8  r  r   s      rb   directory_create_or_existsr)  /  s    7>>$ b	bHT4      	b 	b 	bw5<.((''tttUVU_U_(`aaa 	bb bs   8 
A</A77A<c                    |h|                      d           t          |          }t          |          dk    r1|d         }t          |          dk    r|                     d|           |dk    rd }||                     d           |S )NzLooking up IPv4 addressesr   r   z*More than one IPv4 address found. Using %sz	127.0.0.1z No IPv4 address will be assigned)r  r  r   warning)r  r   r  hostipss       rb   determine_host_ipr-  :  s    ~/000"2&&w<<!QZF7||aK%' ' '~9:::Mrd   c                     |W|                      d           t          |          }|r|d         }t          |          dk    r|                     d|           ||                     d           |S )NzLooking up IPv6 addressesr   r   z*More than one IPv6 address found. Using %sz No IPv6 address will be assigned)r  r  r   r+  )r  r   r  r,  s       rb   determine_host_ip6r/  K  s{    /000"2&& 	!ajGw<<!NNGQQQ9:::Nrd   T2012_R2c2                    	 t          |#          }#n # t          $ r t          d|#z            w xY w|t          j        dd          }|/t                      }/|t          j                    }t          |pdg|           }2t          |pdg          }3t          | pdddd	g          }4t          j        |2          j        }5	 t          d
dg          }6n# t          $ r d}6Y nw xY w|"t          j                            |dd          }n |t          j                                        }t          j                            t          j                            |                    s1t          j        t          j                            |                     g }7i }8|)rdg|8d<   |dk    r|7                    d           n||g|8d<   |(r1|7                    d           |7                    d           ddg|8d<   t1          |7          dk    r|7|8d<   t          j                            |          rt3          |d          }9	 |9                                                                }:|9                                 n# |9                                 w xY w|:|:dk    rt;          ||||||#|%|(|'|8
  
         nt;          ||||||#|%|(|'|8
  
         |'t          j                                        }'|'                    |           tA          |'||||#||	||
|"||tB          k              };tE          |'|;j#                  }<|6|<_$        |2|<_%        |5|<_&        tO          | |'|          }tQ          | |'|          }||;_)        ||;_*        ||;_+        ||;_,        ||;_-        |#|'.                    d          }#t_          |<j0        d           t_          |<j1        d            t_          t          j                            |<j0        d!                     t_          |<j2                   |.stg          |<j4                   |<j5        r>t          j                            |<j5                  st          j        |<j5        d"           tm          |||;j7        |-#          }=tq          |<|'|;| $          }>|>9                                 |>:                                 t          j                            |<j;                  sN| <                    d%           t{          |<j;        ||'&          }?|?>                    t          d'                     | <                    d(           t          |<||'&          }@	 | <                    d)           t          |<jB        ||'*           | <                    d+           t          |<jD        ||'*           | <                    d,           t          |<jF        ||'&          }At          |At          |          |2|3|4|5-           | <                    d.           t          |<jJ        ||>|'|;| |#|=||&|.|/|0|1/          }B|#d0k    rv|<jK        t          d1|<jM                  |<j5        t          d2|<jM                  t          j        N                    |<jK                  st          j        |<jK        d3           |t          j        d4d5          }d6}Cn,t          |t                    r|Q                    d7          }d8}C|t          k    rWt          |B|@| |;|<fi d9|=d:|d;|d<|d=|d>|d?|d@|dA|dB|dC|dD|dE|dF|dG|dH|dI|#dJ|$dK|&dL|'dM|(dN|,dO|/dP|0 t                      sbt          |<jV        ||t          j                            |'.                    dQ                               | <                    dR|<jV                   t          |<jX        |;j#        |;jY        |;jZ        S           | <                    dT|<jX                   | <                    dU           |#d0k    rt          |'| |<           |>\                                }D|>]                                 n#  |@^                                  xY w|@_                                 t          | |<           t                      }E|#|E_b        ||E_c        |<|E_d        |;|E_e        |'|E_f        |B|E_J        |A|E_g        t          |          |E_,        |t          k    r|C|E_h        ||E_i        nd8|E_h        d|E_i        |D|E_j        |)r7t          | |B|;jc        |;jl        |;jm        n                                |*|+V           |ES )WzHProvision samba4

    :note: caution, this wipes all existing data!
    zlserver role (%s) should be one of "active directory domain controller", "member server", "standalone server"Nr  r  r,  nobodyusersotherstaffbindnamedetczsmb.confr  zidmap_ldb:use rfc2307r   z-dnszdns forwarderz+smbz-s3fsz+winregz+srvsvczdcerpc endpoint serversr   zserver servicesr  r   )rU  ro  rp  r   rq  )r   ry   rx   ru   rU  ro   rp   rq   r   rz   rn   rV  rO  i  i  tlsr  )r  rq   rj  )r   r   r   r  zSetting up share.ldbr  z
share.ldifzSetting up secrets.ldbzSetting up the registry)r   z"Setting up the privileges databasezSetting up idmap db)r  r-  r  r  r   zSetting up SAM db)	r  rU  r-  r
  r&  r  r  r  r.  rP  r:  r9  r         Tr  Fr-  rn  r  r  r  r  r  r   rl  r  r  r  r  r   r   r  rU  rm  r&  r   rp  r  r  r  zlog filez<The Kerberos KDC configuration for Samba AD is located at %s)ru   ry   rv   zGA Kerberos configuration suitable for Samba AD has been generated at %szpMerge the contents of this file with your system krb5.conf or replace it with this one. Do not create a symlink!r  )or  r  r   r   r  rH   r   
random_sidr.  r%  r*  r   r   r   r  r;  r8  r<  r   default_pathre  dirnamer  r   r   ri  readlstriprl  rz  rd  rf  rW  r?   rF  ru   bind_gidr-  r   r-  r/  r  r  r~   r|   r}   r   r)  r]   r^   r_   r  rA  r9  rD   rq   r$   initstartrO   r  r   r  r9   r  r  rP   r  r=  r  rW   r  r   r4  rV   r:  MissingShareErrorr{   isdirr  bytesr   r<   r  r   rG   r?  create_krb5_confr>  ry   rv   rC   
post_setupshutdownr  r  rB   r  r  ro   r   r   r   r  r  r   r  r#  rw   rx   r   )Fr  r  r{   rn  r  rv   rn   ro   rq   rp   r   rx   ry   r  r  r|   r  r  r   ldapadminpassrl  r~   r  r  r   dns_forwarderr  r  r  r   r,  r2  r3  backuprz   rU  rm  useeadbr&  r   rp  use_rfc2307r!  r"  r  rj  r  r  r  r.  r-  r  r  r   rA  server_servicesrq  rw  datar   r   r-  r  	share_ldbr  r  rV   r  r  resultsF                                                                         rb   	provisionrS  Y  s   (])*55

 ] ] ]  !O  R\  !\  ]  ]  	]] 6sC@@133'))	T^V,f55Hf0122JU-gwIJJI|H%%,H011    ',,y%<<	+**,,7>>"'//'2233 .
BGOOG,,---OL 816,-&&&v&&&&$-:OL) Iv&&&w'''3<i2H./
?a*9&' 
w~~g Z #	6688??$$DGGIIIIAGGIIII<42::(FE"z%\; ; ; ;
 	Why *!Y2L	Z 	Z 	Z 	Z 
z[!!##GGG2"'J!)Hx!)&z]eOeh h hE $B88EENENENvr622F W55GELEM!EEOEOVVM**
u0%888u0%888rw||E,=uEEFFFu/// F#E$DEEE| )BGNN5<88 )
EL%(((IL"^F F FF #&().v? ? ?  7>>%/** ?*+++lrJJJ	$$Z%=%=>>>
KK()))!%/;D D DKP-...uz<B77778999,2>>>>)***em,2NNNEs9~~%-*&/(	D 	D 	D 	D 	'(((EK-r5'1#)
G.?*7/A'13 3 3 ===~%'
EMBBB|#'%-@@@7==00 3ENE2226r2>>I"&)U++ 6%,,W55	"'""5+vue B B B"(&B4=IBJT*B"(&B29'B %-HB 6<VB HQyB '1j	B
 '1jB
 ANB )5B CN+B %-HB ;F+B $+7B 8BzB .?->B IPB !bB -6IB +9.B *7B /A.@B B  !! 	8EM5&"'//"&&Q[J\J\:]:]^^^KK ().8 8 8 	#(?U^${	, 	, 	, 	, 	 &',~	7 	7 	7  	  	  	  ==="2vu555*5577""$$$$&&((( ""$$$ vu---F#FFOFLFLFIFLFL9~~FY%8"$%*"*F ^vU).UEV*/,*<*<*>*>vV\	^ 	^ 	^ 	^ Ms3    /C C#"C#&I= =J(La0 0bc                 R   t          j        d          }t          j        |           t	          |t                      fi d| d|dt          d|d|d|d|d	|d
|d|d|	dd d|
d|ddd|d|d|d|}|j                            dt          |                     |S )NrS  r{   rn  r  rv   rn   ro   rq   rp   r   rx   ry   r  r|   r  rU  rP  rz   r   r  rp  
debuglevel)
logging	getLoggerr   set_debug_levelrS  r   r?   r   rh  r   )r{   rn  rv   rn   ro   rq   rp   r   rx   ry   r|   r  r  r   rz   rU  rp  r  r   s                      rb   provision_become_dcrY  ]	  sC    {++F	*%%%
FN,, ) ) )#G)/8y)EMX)%)(.)9A)LTH) &X) 19) BH) &X	) /3d	) ?Hi	)
 !,)  DC) &X) 4?;) IP) (i)C FJJ|S__---Jrd   c                 J    t          t          d          | |||d           dS )zWrite out a file containing a valid krb5.conf file

    :param path: Path of the new krb5.conf file.
    :param dnsdomain: DNS Domain name
    :param hostname: Local hostname
    :param realm: Realm name
    r6  )r  r  REALMN)r   r9   )r8  ru   ry   rv   s       rb   rG  rG  u	  s?     z+&&" / /     rd   c                       e Zd ZdZd Zd ZdS )r   zA generic provision error.c                     || _         d S rN   value)ra   r_  s     rb   rc   zProvisioningError.__init__	  s    


rd   c                     d| j         z   S )NzProvisioningError: r^  r`   s    rb   __str__zProvisioningError.__str__	  s    $tz11rd   N)rf   rg   rh   r  rc   ra  ri   rd   rb   r   r   	  s8        $$  2 2 2 2 2rd   r   c                   "     e Zd ZdZ fdZ xZS )rS  z.A specified name was not a valid NetBIOS name.c                 ^    t          t          |                               d|z             d S )Nz)The name '%r' is not a valid NetBIOS name)superrS  rc   )ra   r  	__class__s     rb   rc   zInvalidNetbiosName.__init__	  s=     $''007$>	@ 	@ 	@ 	@ 	@rd   )rf   rg   rh   r  rc   __classcell__re  s   @rb   rS  rS  	  sG        88@ @ @ @ @ @ @ @ @rd   rS  c                        e Zd Z fdZ xZS )rD  c                 f    t          t          |                               d|d|d           d S )Nz#Existing smb.conf does not have a [z5] share, but you are configuring a DC. Please remove z or add the share manually.)rd  rD  rc   )ra   r  r{   re  s      rb   rc   zMissingShareError.__init__	  sG    &&/// TT777	 	 	 	 	rd   )rf   rg   rh   rc   rf  rg  s   @rb   rD  rD  	  s8                rd   rD  )F)NNNNNNNNNNNF)NFFNN)FFNN)NN)FFNNF)FNNNNNN)r  rN   )NNNNNNNNNNNNNNNr   F)r  __docformat__base64r   r&  r;  r  r   r   r(  rV  r_  r  rQ  r  
samba.dsdbr   r   
samba.authr   r   samba.auth_utilr   r   samba.samba3r	   r
   r   r  r   r   r   r   r   r   r   r   r   r   samba.dcerpcr   r   samba.dcerpc.miscr   r   r   r   r   samba.idmapr   samba.ms_display_specifiersr   samba.ntaclsr   r    r!   	samba.ndrr"   r#   samba.provision.backendr$   samba.descriptorr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   samba.provision.commonr9   r:   r;   r<   r=   r>   r?   samba.provision.sambadnsr@   rA   rB   rC   samba.paramsamba.registrysamba.schemarD   samba.samdbrE   samba.dbcheckerrF   samba.provision.kerberosrG   rH   r   r   rT  r   r`  objectrL   rk   r   r   r   r   r  r  r   r%  r*  r.  rF  rL  rW  rz  r  r  r  r  r  r  r  r  r  r  r  r   r"  r(  r4  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r)  r-  r/  rS  rY  rG  	Exceptionr   rS  rD  ri   rd   rb   <module>r     sO
  2 6 5"        				  				 



 



          



 4 4 4 4 4 4 4 4 / / / / / /        % % % % % % % % ) ) ) ) ) ) . . . . . .
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ( ' ' ' ' ' ' '                
        4 4 4 4 4 4 8 8 8 8 8 8 8 8 8 8 * * * * * * * *                                                ,                                                 # # # # # # 4 4 4 4 4 4 1 1 1 1 1 1< ? '1      V   ,    V   0_ _ _D& & & &R  0      & & &R#6 #6 #6 #6 #6f #6 #6 #6L> > >+ + ++ + +  - - -`6 6 6 @DFJ7;$)r r r rl CG"c c c cLF F F* ;@AEF# F# F# F#T =A"d$(+,,:W W W Wt' ' 'TM M M   2" " "   "  " JN_ _ _ _D     # # #  -  ;@7;49? ? ? ?H EJJN!"&E E E EP {
 U CQ 	c 	c 	c 	c# # #@la la la^  D D D> 3  3  3F/) /) /)d      !i $"t4 $$#T"d TU"'t&*N# N# N# N#d +);;
.=*N$%, 
  # # #*b b b b   "    -1$tdTDDttDD$4tdDTDDUtuT$# %T!%%A A A AH =A=A=A1526DE"'   0  2 2 2 2 2	 2 2 2@ @ @ @ @ @ @ @    )     rd   