ó
E®Uc           @   s³   d  d l  m Z m Z m Z m Z d  d l j Z d  d l m	 Z	 d  d l
 m Z d  d l Z d  d l m Z m Z d  d l m Z d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d S(   iÿÿÿÿ(   t   Commandt   CommandErrort   Optiont   SuperCommandN(   t   SamDB(   t   system_session(   t   misct   drsuapi(   t   drs_Replicatet   cmd_rodc_preloadc           B   sz   e  Z d  Z d Z i e j d 6e j d 6e j d 6Z e	 d d d d e
 ƒg Z d	 g Z d
 „  Z d d d d d „ Z RS(   s    Preload one account for an RODC.s*   %prog (<SID>|<DN>|<accountname>) [options]t	   sambaoptst   versionoptst   credoptss   --servert   helps	   DC to uset   typet   accountc      	   C   så   | d d !d k rA | j  d d | d d d t j d	 g  ƒ } nm | j d
 ƒ d k r€ | j  d | d d d t j d	 g  ƒ } n. | j  d d t j | ƒ d t j d	 g  ƒ } t | ƒ d k rÓ t d | ƒ ‚ n  t | d d ƒ S(   s   work out what DN they meanti    i   s   S-t   bases   <SID=%s>t
   expressions   objectclass=usert   scopet   attrst   =s(   (&(samAccountName=%s)(objectclass=user))i   s   Failed to find account '%s't   dn(	   t   searcht   ldbt
   SCOPE_BASEt   findt   binary_encodet   SCOPE_SUBTREEt   lent	   Exceptiont   str(   t   selft   samdbR   t   res(    (    s5   /usr/lib/python2.7/dist-packages/samba/netcmd/rodc.pyt   get_dn-   s    c      	   C   s§  | d  k r t d ƒ ‚ n  | j ƒ  } | j | d t ƒ} t d d | d t ƒ  d | d | ƒ } t d d  d t ƒ  d | d | ƒ }	 | j ƒ  }
 | j d |
 d	 t	 j
 d
 d g ƒ } t j |	 j d | d d d ƒ ƒ } |  j | | ƒ } |  j j d | ƒ t j |	 j ƒ  ƒ } |	 j ƒ  t d | | | |	 | ƒ } y& | j | | | d t j d t ƒWn0 t k
 r˜} |	 j ƒ  t d | | ƒ ‚ n X|	 j ƒ  d  S(   Ns   You must supply a servert   fallback_machinet   urls	   ldap://%st   session_infot   credentialst   lpR   R   R   t   invocationIdt
   objectGUIDi    s   Replicating DN %s
s   ncacn_ip_tcp:%s[seal,print]t   exopt   rodcs   Error replicating DN %s(   t   NoneR   t   get_loadparmt   get_credentialst   TrueR   R   t   get_dsServiceNameR   R   R   R   t   GUIDt   schema_format_valueR"   t   outft   writet   get_ntds_GUIDt   transaction_startR   t	   replicateR   t   DRSUAPI_EXOP_REPL_SECRETt   transaction_cancelR   t   transaction_commit(   R   R   R
   R   R   t   serverR'   t   credsR    t   local_samdbt
   dc_ntds_dnR!   t   source_dsa_invocation_idR   t   destination_dsa_guidt   replt   e(    (    s5   /usr/lib/python2.7/dist-packages/samba/netcmd/rodc.pyt   runA   s2    	$'

N(   t   __name__t
   __module__t   __doc__t   synopsist   optionst   SambaOptionst   VersionOptionst   CredentialsOptionst   takes_optiongroupsR   R   t   takes_optionst
   takes_argsR"   R,   RC   (    (    (    s5   /usr/lib/python2.7/dist-packages/samba/netcmd/rodc.pyR	      s   

		t   cmd_rodcc           B   s!   e  Z d  Z i  Z e ƒ  e d <RS(   s.   Read-Only Domain Controller (RODC) management.t   preload(   RD   RE   RF   t   subcommandsR	   (    (    (    s5   /usr/lib/python2.7/dist-packages/samba/netcmd/rodc.pyRO   j   s   (   t   samba.netcmdR    R   R   R   t   samba.getoptt   getoptRH   t   samba.samdbR   t
   samba.authR   R   t   samba.dcerpcR   R   t   samba.drs_utilsR   R	   RO   (    (    (    s5   /usr/lib/python2.7/dist-packages/samba/netcmd/rodc.pyt   <module>   s   "N