
    b                         d Z ddlZddlmZmZ  G d de          Z G d de          Z G d d	e          Z G d
 de          Zd Z	d Z
dS )zManipulating sites.    N)FLAG_MOD_ADDLdbErrorc                       e Zd ZdZd Zd ZdS )SiteExceptionzBase element for Sites errorsc                     || _         d S )N)value)selfr   s     -/usr/lib/python3/dist-packages/samba/sites.py__init__zSiteException.__init__   s    


    c                 .    | j         j        d| j        S )Nz: )	__class____name__r   )r	   s    r
   __str__zSiteException.__str__   s    >222DJJ??r   N)r   
__module____qualname____doc__r   r    r   r
   r   r      s=        ''  @ @ @ @ @r   r   c                       e Zd ZdZdS )SiteNotFoundExceptionz>Raised when the site is not found and it's expected to exists.Nr   r   r   r   r   r   r
   r   r   "   s        HHHHr   r   c                       e Zd ZdZdS )SiteAlreadyExistsExceptionzBRaised when the site is not found and it's expected not to exists.Nr   r   r   r
   r   r   &   s        LLLLr   r   c                       e Zd ZdZdS )SiteServerNotEmptyExceptionz0Raised when the site still has servers attached.Nr   r   r   r
   r   r   *   s        ::::r   r   c           	      T   |                      |t          j        d|z            }t          |          dk    rt	          d|z            t          j                    }t          j        | d|dt          |                    |_        t          j	        dt          d          |d<   |                     |           t          j                    }t          j        | d	t          |j                  z            |_        t          j	        d
t          d          |d<   |                     |           t          j                    }t          j        | dt          |j                  z            |_        t          j	        dt          d          |d<   |                     |           dS )a  
    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
expressionr   z&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_siter6   .   sX    ,,HC,="@8"K  M MC
3xx1}}()QT\)\]]]A6%%#h---HIIAD)&,NNAm	IIaLLL	BF54s14yy@AABE*+=|][[B}	IIbMMM	BF5/CII566BE*+=|][[B}	IIbMMM4r   c                 &   t          j        | d          }|                    |          dk    rt          d          |                    d          dk    rt          d          |                    dd|           t          j        | d          }|                    |           	 |                     |t           j        d	
          }t          |          dk    rt          d|z            nC# t          $ r6}|j        \  }}|t           j        k    rt          d|z            Y d}~nd}~ww xY w|                     |t           j        d
          }t          |          dk    rt          d|z            |                     |dg           dS )aV  
    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=SitesFzdnsites.add_base() failedzCN=Xzdnsites.add_child() failedr   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&   r*   add_baser   	add_childset_componentr%   
SCOPE_BASEr(   r   r   argsERR_NO_SUCH_OBJECTSCOPE_ONELEVELr   delete)	r/   r0   r1   dnsite	dnserversr2   eenumestrs	            r
   delete_siterG   S   s    VE:&&Fx  E))78885((8999
D(+++ul++IvMllcn&8  : :s88q=='(@8(KLLL  M M Mvt3)))'(@8(KLLL *))))M
 ,,IS-?"8  : :C
3xx1}})*ehp*pqqq	LL/*+++4s   (AC0 0
D0:,D++D0)r   r&   r   r   	Exceptionr   r   r   r   r6   rG   r   r   r
   <module>rI      s  $   



 & & & & & & & &@ @ @ @ @I @ @ @I I I I IM I I IM M M M M M M M; ; ; ; ;- ; ; ;" " "J' ' ' ' 'r   