+
    4Ssi                         R t ^ RIt^ RIHtHt  ! R R]4      t ! R R]4      t ! R R]4      t ! R	 R
]4      tR t	R t
R# )zManipulating sites.N)FLAG_MOD_ADDLdbErrorc                   0   a  ] tR t^t o RtR tR tRtV tR# )SiteExceptionzBase element for Sites errorsc                    Wn         R # )Nvalue)selfr   s   &&-/usr/lib/python3/dist-packages/samba/sites.py__init__SiteException.__init__   s    
    c                P    V P                   P                  : R V P                  : 2# )z: )	__class____name__r   )r	   s   &r
   __str__SiteException.__str__   s    >>22DJJ??r   r   N)	r   
__module____qualname____firstlineno____doc__r   r   __static_attributes____classdictcell__)__classdict__s   @r
   r   r      s     '@ @r   r   c                       ] tR t^"tRtRtR# )SiteNotFoundExceptionz>Raised when the site is not found and it's expected to exists. Nr   r   r   r   r   r   r   r   r
   r   r   "   s    Hr   r   c                       ] tR t^&tRtRtR# )SiteAlreadyExistsExceptionzBRaised when the site is not found and it's expected not to exists.r   Nr   r   r   r
   r   r   &   s    Lr   r   c                       ] tR t^*tRtRtR# )SiteServerNotEmptyExceptionz0Raised when the site still has servers attached.r   Nr   r   r   r
   r!   r!   *   s    :r   r!   c           	     l   V P                  V\        P                  RV,          R7      p\        V4      ^ 8w  d   \	        RV,          4      h\        P
                  ! 4       p\        P                  ! V RV: R\        V4      : 24      Vn        \        P                  ! R\        R4      VR&   V P                  V4       \        P
                  ! 4       p\        P                  ! V R\        VP                  4      ,          4      Vn        \        P                  ! R	\        R4      VR&   V P                  V4       \        P
                  ! 4       p\        P                  ! V R
\        VP                  4      ,          4      Vn        \        P                  ! R\        R4      VR&   V P                  V4       R# )z
Create a site

:param samdb: A samdb connection
:param configDn: The DN of the configuration partition
:param siteName: Name of the site to create
:return: True upon success
:raise SiteAlreadyExists: if the site to be created already exists.
z(&(objectclass=Site)(cn=%s))basescope
expressionz&A site with the name %s already existszCn=z
,CN=Sites,siteobjectclasszCn=NTDS Site Settings,%snTDSSiteSettingszCn=Servers,%sserversContainerT)searchldbSCOPE_SUBTREElenr   MessageDnstrdnMessageElementr   add)samdbconfigDnsiteNameretmm2m3s   &&&    r
   create_siter<   .   s3    ,,HC,=,="@8"K  MC
3x1}()QT\)\]]A66%#h-HIAD))&,NAm	IIaL	BFF54s144y@ABE**+=|][B}	IIbM	BFF5/CI56BE**+=|][B}	IIbMr   c                V   \         P                  ! V R4      p VP                  V4        TP                  R4       TP                  ^ RT4       \         P                  ! T R4      pTP                  T4        T P                  T\         P                  RR7      p\        T4      ^8w  d   \        R	T,          4      h T P                  T\         P                  RR7      p\        T4      ^ 8w  d   \        RT,          4      hT P                  TR.4       R#   \         P                   d    \	        R4      hi ; i  \         P                   d    \	        R4      hi ; i  \         d@   pTP                  w  rxT\         P                  8X  d   \        R	T,          4      h R
p?LR
p?ii ; i)a6  
Delete a site

:param samdb: A samdb connection
:param configDn: The DN of the configuration partition
:param siteName: Name of the site to delete
:return: True upon success
:raise SiteNotFoundException: if the site to be deleted do not exists.
:raise SiteServerNotEmpty: if the site has still servers in it.
zCN=Siteszdnsite.add_base() failedzCN=Xzdnsite.add_child() failedCNz
CN=ServerszobjectClass=siter#   zSite %s does not existNz(objectclass=server)z9Site %s still has servers in it, move them before removalztree_delete:0T)r,   r0   add_baser   r   	add_childset_componentr+   
SCOPE_BASEr.   r   argsERR_NO_SUCH_OBJECTSCOPE_ONELEVELr!   delete)	r5   r6   r7   dnsite	dnserversr8   eenumestrs	   &&&      r
   delete_siterL   S   s    VVE:&F8!9  D(+ul+IvMllcnn&8  :s8q='(@8(KLL  ,,IS-?-?"8  :C
3x1})*ehp*pqq	LL/*+9 << 86778 << 97889  Mvv3)))'(@8(KLL *Ms/   D D: 8AE !D7:!EF()5F##F()r   r,   r   r   	Exceptionr   r   r   r!   r<   rL   r   r   r
   <module>rN      sQ   $  
 &@I @IM IM M;- ;"J+r   