ó
E®Uc           @   s°  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 m Z m Z m Z m Z d d l m Z m Z m Z d d l m Z m Z d d l m Z d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d e f d „  ƒ  YZ! d e! f d „  ƒ  YZ" d e! f d „  ƒ  YZ# d S(   sG   Functions for setting up a Samba configuration (LDB and LDAP backends).iÿÿÿÿ(   t	   b64encodeN(   t
   SCOPE_BASEt   SCOPE_ONELEVELt   LdbErrort
   timestring(   t   Ldbt   read_and_sub_filet
   setup_file(   t   Credentialst   DONT_USE_KERBEROS(   t   Schemat   SlapdAlreadyRunningc           B   s   e  Z d  „  Z RS(   c         C   s*   | |  _  t t |  ƒ j d |  j  ƒ d  S(   NsK   Another slapd Instance seems already running on this host, listening to %s.(   t	   ldapi_urit   superR   t   __init__(   t   selft   uri(    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   0   s    	(   t   __name__t
   __module__R   (    (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   .   s   t   BackendResultc           B   s   e  Z d  „  Z RS(   c         C   s   t  |  j ƒ ‚ d S(   s5   Rerport this result to a particular logger.

        N(   t   NotImplementedErrort   report_logger(   R   t   logger(    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   9   s    (   R   R   R   (    (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   7   s   t   LDAPBackendResultc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   t   slapd_command_escapedt   ldapdir(   R   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   B   s    	c         C   sF   |  j  d  k	 rB | j d ƒ | j |  j  ƒ | j d |  j ƒ n  d  S(   Ns?   Use later the following commandline to start slapd, then Samba:sG   This slapd-Commandline is also stored under: %s/ldap_backend_startup.sh(   R   t   Nonet   infoR   (   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   F   s    (   R   R   R   R   (    (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   @   s   	t   ProvisionBackendc           B   sA   e  Z d d d d d  „ Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sC   | |  _  | |  _ d |  _ | |  _ | |  _ | |  _ | |  _ d S(   s   Provision a backend for samba4N(   t   pathst   lpR   t   credentialst   namesR   t   typet   ldap_backend_type(   R   t   backend_typeR   R   R    R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   T   s    						c         C   s   t  |  j ƒ ‚ d S(   s   Initialize the backend.N(   R   t   init(   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR$   b   s    c         C   s   t  |  j ƒ ‚ d S(   s   Start the backend.N(   R   t   start(   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR%   f   s    c         C   s   t  |  j ƒ ‚ d S(   s   Shutdown the backend.N(   R   t   shutdown(   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR&   j   s    c         C   s   t  |  j ƒ ‚ d S(   s>   Post setup.

        :return: A BackendResult or None
        N(   R   t
   post_setup(   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR'   n   s    N(   R   R   R   R   R$   R%   R&   R'   (    (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   R   s   			t
   LDBBackendc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s'   d  |  _ t j |  j j d t ƒ d  S(   Ns   .d(   R   R   t   shutilt   rmtreeR   t   samdbt   True(   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR$   x   s    	c         C   s   d  S(   N(    (   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR%   ~   s    c         C   s   d  S(   N(    (   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR&      s    c         C   s   d  S(   N(    (   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR'   „   s    (   R   R   R$   R%   R&   R'   (    (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR(   v   s   			t   ExistingBackendc           B   s)   e  Z d d d d d d  „ Z d „  Z RS(   c         C   s;   t  t |  ƒ j d | d | d | d | d | d | ƒ d  S(   NR#   R   R   R    R   t   ldap_backend_forced_uri(   R   R-   R   (   R   R#   R   R   R    R   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   Š   s    c         C   s8   t  |  j ƒ } | j d d d t d d ƒ d |  _ d  S(   Nt   baset    t   scopet
   expressions   (objectClass=OpenLDAProotDSE)t   openldap(   R   R   t   searchR   R"   (   R   t   ldapi_db(    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR$   ’   s    N(   R   R   R   R   R$   (    (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR-   ˆ   s   t   LDAPBackendc           B   sb   e  Z d d d d d d d d d d d e d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C   s*  t  t |  ƒ j d | d | d | d | d | ƒ | |  _ | |  _ | |  _ t j j | j	 d ƒ |  _
 |	 |  _ |
 |  _ d  |  _ d  |  _ t j j |  j
 d ƒ |  _ | |  _ | |  _ | d  k	 rÐ | |  _ n. d t j t j j |  j
 d	 ƒ d
 d ƒ|  _ t j j |  j
 ƒ s&t j |  j
 ƒ n  d  S(   NR#   R   R   R    R   t   ldaps	   slapd.pids
   ldapi://%st   ldapit   safeR0   (   R   R6   R   t	   domainsidt   schemat   hostnamet   ost   patht   joint   private_dirR   t   ldapadminpasst
   slapd_pathR   t   slapd_commandR   t	   slapd_pidt   ldap_backend_extra_portt   ldap_dryrun_modet   ldap_urit   urllibt   quotet   existst   mkdir(   R   R#   R   R   R    R   R:   R;   R<   RA   RB   RE   R.   RF   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   ž   s(    										%c         C   s	  d d l  m } y± t |  j ƒ } | j d d d t d d ƒ y t |  j d ƒ } Wn( t k
 r~ } | t	 j
 k r± ‚  q± n3 Xz | j ƒ  } Wd  | j ƒ  X|  j j d	 | ƒ t |  j ƒ ‚ Wn t k
 rÔ n X|  j d  k ró | d
 ƒ ‚ n  t j j |  j ƒ s!|  j j d |  j ƒ n  t j j |  j ƒ sLt j |  j d ƒ n  t j j |  j d ƒ } y t j | ƒ Wn t k
 rˆn X|  j j | ƒ t ƒ  |  _  |  j  j! |  j" ƒ |  j  j# t$ ƒ |  j  j% d ƒ |  j  j& |  j' ƒ |  j  j( d ƒ |  j) ƒ  d  S(   Niÿÿÿÿ(   t   ProvisioningErrorR/   R0   R1   R2   s   (objectClass=OpenLDAProotDSE)t   rs?   Check for slapd process with PID: %s and terminate it manually.se   Warning: LDAP-Backend must be setup with path to slapd, e.g. --slapd-path="/usr/local/libexec/slapd"!s"   Path (%s) to slapd does not exist!iÀ  s   schema-tmp.ldbs   samba-admint   EXTERNAL(*   t   samba.provisionRL   R   RG   R4   R   t   openRD   t   IOErrort   errnot   ENOENTt   readt   closeR   R   R   R   RB   R   R=   R>   RJ   t   warningt   isdirR   t   makedirsR?   t   unlinkt   OSErrorR;   t   write_to_tmp_ldbR   R   t   guessR   t   set_kerberos_stateR	   t   set_usernamet   set_passwordRA   t   set_forced_sasl_mecht	   provision(   R   RL   R5   t   ft   errt   pt   schemadb_path(    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR$   À   sJ    
c         C   s   d  S(   N(    (   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyRa   ù   s    c         C   s¼  d d l  m } d d j |  j ƒ d |  _ t j j |  j d ƒ } t | d ƒ } z | j	 d |  j d ƒ Wd  | j
 ƒ  Xt j | d	 ƒ t j |  j d
 t d t ƒ|  _ d } xÌ |  j j ƒ  d  k rƒyR t j d ƒ t |  j d |  j d |  j ƒ} | j d d d t d d ƒ d  SWq¸ t k
 r| d } | d k r€|  j j d d d j |  j ƒ d ƒ | d ƒ ‚ q€q¸ Xq¸ W|  j j d d d j |  j ƒ d ƒ | d ƒ ‚ d  S(   Niÿÿÿÿ(   RL   s   's   ' 's   ldap_backend_startup.sht   ws
   #!/bin/sh
s    $@
ií  t	   close_fdst   shelli    i   R   R   R/   R0   R1   R2   s   (objectClass=OpenLDAProotDSE)i   s+   Could not connect to slapd started with: %ss?   slapd never accepted a connection within 15 seconds of startings   Could not start slapd with: %ss2   slapd died before we could make a connection to it(   RO   RL   R?   RC   R   R=   R>   R   RP   t   writeRU   t   chmodt
   subprocesst   Popent   slapd_provision_commandR,   t   Falset   slapdt   pollR   t   timet   sleepR   RG   R   R   R4   R   R   R   t   error(   R   RL   t   ldap_backend_scriptRb   t   countR5   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR%   ü   s2    !
((c         C   sy   |  j  j ƒ  d  k ru t |  j  d d  ƒ d  k	 r@ |  j  j ƒ  n% d d  l } t j |  j  j | j	 ƒ |  j  j
 ƒ  n  d  S(   Nt	   terminateiÿÿÿÿ(   Ro   Rp   R   t   getattrRv   t   signalR=   t   killt   pidt   SIGTERMt   communicate(   R   Rx   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR&   #  s    c         C   s   t  |  j |  j ƒ S(   N(   R   R   R   (   R   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR'   2  s    	N(
   R   R   R   Rn   R   R$   Ra   R%   R&   R'   (    (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR6   œ   s   			9		'	t   OpenLDAPBackendc           B   sP   e  Z d d d d d d d d d d d e d e d d  „ Z d „  Z d „  Z RS(   c         C   sq  d d l  m } t t |  ƒ j d | d | d | d | d | d | d	 | d
 |	 d |
 d | d | d | d | ƒ | |  _ | |  _ t j j	 |  j
 d ƒ |  _ t j j	 |  j
 d ƒ |  _ t j j	 |  j
 d ƒ |  _ t j j	 |  j
 d ƒ |  _ t j j	 |  j
 d ƒ |  _ t j j	 |  j
 d ƒ |  _ t j j	 |  j
 d ƒ |  _ t |  j d |  j j d | d ƒ g ƒ|  _ d  S(   Niÿÿÿÿ(   t
   setup_pathR#   R   R   R    R   R:   R;   R<   RA   RB   RE   R.   RF   s
   slapd.confs   modules.confs   memberof.confs   mmr_serverids.confs   mmr_syncrepl.confs   slapd.ds   olc_seed.ldift   schemadnt   filess   schema_samba4.ldif(   RO   R~   R   R}   R   t   ol_mmr_urlst   nosyncR=   R>   R?   R   t	   slapdconft   modulesconft   memberofconft   olmmrserveridsconft   olmmrsyncreplconft   olcdirt   olcseedldifR
   R:   R    R   R;   (   R   R#   R   R   R   R    R   R:   R;   R<   RA   RB   RE   RF   R   R‚   R.   R~   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   9  s*    		c         C   s)   t  j j | ƒ s% t  j | d ƒ n  d S(   sP   Create a database directory.

        :param dbdir: Database directory.
        iÀ  N(   R=   R>   RJ   RX   (   R   t   dbdir(    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyt   setup_db_dirW  s    c   +   	   C   s
  d d l  m } m } t j t j j |  j d ƒ t	 ƒ d } |  j
 rP d } n  |  j j ƒ  } d } d } x` | j ƒ  D]R } | | d  k	 rx | d | } | t | d ƒ i | d	 6| | d
 6ƒ 7} qx qx Wt | d ƒ i | d 6ƒ } d d g }	 |  j j j d d d |  j j d t d |	 ƒ }
 d } xV t d t |
 ƒ ƒ D]? } |
 | d d } | d k rod } n  | d | d 7} qBWd } d } d } d } d } d } d } d } d } |  j d  k	 r|  j } t d  |  j j d ƒ ƒ } x" | D] } |  j j d | ƒ qõWt | ƒ d k r4| d ƒ ‚ n  d } d } d } xÑ| D]Æ} | d } | t | d ƒ i t | ƒ d  6| d! 6ƒ 7} | d" } | d } | t | d# ƒ i t | ƒ d$ 6|  j j d% 6| d! 6| d& 6ƒ 7} | d } | t | d# ƒ i t | ƒ d$ 6|  j j d% 6| d! 6| d& 6ƒ 7} | d } | t | d# ƒ i t | ƒ d$ 6d' |  j j d% 6| d! 6| d& 6ƒ 7} | d } | t | d# ƒ i t | ƒ d$ 6d( |  j j d% 6| d! 6| d& 6ƒ 7} | d } | t | d# ƒ i t | ƒ d$ 6|  j j d% 6| d! 6| d& 6ƒ 7} qMWn  d } d } |  j d  k	 rMd } d } d } | t | d) ƒ i  ƒ 7} d* } x° | D]¨ } | d } | t | d+ ƒ i t | ƒ d  6| d! 6ƒ 7} | d } | t | d, ƒ i t | ƒ d$ 6| d! 6| d& 6ƒ 7} | t | d- ƒ i t | ƒ d$ 6| d! 6ƒ 7} qmWt  | d. ƒ |  j! i | d/ 6|  j d0 6| d1 6ƒ n  t  | d2 ƒ |  j" i |  j j# d3 6|  j d4 6|  j j d5 6|  j j d6 6|  j j d7 6| d8 6| d9 6| d: 6| d; 6| d< 6| d= 6| d> 6| d? 6| d@ 6| dA 6| dB 6| dC 6| dD 6t t j$ ƒ  ƒ dE 6| dF 6ƒ |  j% t j j |  j d dG ƒ ƒ |  j% t j j |  j d dH ƒ ƒ |  j% t j j |  j d dI ƒ ƒ |  j% t j j |  j d dJ ƒ ƒ |  j% t j j |  j d dK ƒ ƒ |  j% t j j |  j d dL ƒ ƒ |  j d  k	 rýd } n dM } t | dN ƒ i |  j dO 6| d& 6| dP 6ƒ }  dQ }! dR }" t& | |! ƒ dS ƒ }# z |  j j' dT |# j( ƒ  ƒ }$ Wd  |# j) ƒ  X|$ d  k	 st* ‚ t& t j j |  j |" ƒ dU ƒ }# z |# j+ |$ ƒ Wd  |# j) ƒ  X|  j, d  k	 r"|  j d  k rþdV |  j, }% q(dW |  j j- |  j j# |  j, ƒ }% n d }% |  j. dX |  j/ dY g |  _0 t1 |  j0 ƒ |  _2 |  j0 j3 |  j4 dZ g ƒ |  j4 }& |% d k	 r•|& d |% }& n  |  j2 j5 |& ƒ t j |  j/ t	 ƒ t j6 |  j/ d[ ƒ |  j7 rät8 j9 d ƒ n  |  j. d\ d] d^ d_ |  j" dX |  j/ g }' t: j; |' d` t	 da t< ƒ}( |( d k rf	|  j j= db dc dd j |' ƒ dc ƒ | de ƒ ‚ n  t j j> t j j |  j/ df ƒ ƒ s™	| de ƒ ‚ n  t j? |  j" ƒ |  j. dg dh di dX |  j/ g }) t: j@ |) dj t: jA da t< ƒ}* |* jB j+ |  ƒ |* jC ƒ  d  S(k   Niÿÿÿÿ(   RL   R~   t   dbR0   t   dbnosyncs   # Generated from Samba4 schema
t    s   memberof.conft   MEMBER_ATTRt   MEMBEROF_ATTRs   refint.conft
   LINK_ATTRSt   linkIDt   lDAPDisplayNameR2   sG   (&(objectclass=attributeSchema)(searchFlags:1.2.840.113556.1.4.803:=1))R/   R1   t   attrsi    t
   objectGUIDt	   entryUUIDs   index s    eq
t   ,s   Using LDAP-URL: i   s$   At least 2 LDAP-URLs needed for MMR!s   MirrorMode Ons#     by dn=cn=replicator,cn=samba reads   mmr_serverids.conft   SERVERIDt
   LDAPSERVERi
   s   mmr_syncrepl.conft   RIDt   MMRDNt   MMR_PASSWORDs   dc=DomainDNSZones,s   dc=ForestDNSZones,s   olc_mmr.confiô  s   olc_serverid.confs   olc_syncrepl.confs   olc_syncrepl_seed.confs   olc_seed.ldift   OLC_SERVER_ID_CONFt   OLC_PWt   OLC_SYNCREPL_CONFs
   slapd.conft	   DNSDOMAINt   LDAPDIRt   DOMAINDNt   CONFIGDNt   SCHEMADNt   MEMBEROF_CONFIGt
   MIRRORMODEt   REPLICATOR_ACLt   MMR_SERVERIDS_CONFIGt   MMR_SYNCREPL_SCHEMA_CONFIGt   MMR_SYNCREPL_CONFIG_CONFIGt   MMR_SYNCREPL_DOMAINDNS_CONFIGt   MMR_SYNCREPL_FORESTDNS_CONFIGt   MMR_SYNCREPL_USER_CONFIGt   OLC_SYNCREPL_CONFIGt   OLC_MMR_CONFIGt   REFINT_CONFIGt   INDEX_CONFIGt	   ADMIN_UIDt   NOSYNCt	   forestdnst	   domaindnst   usert   configR;   t   sambat   #s   cn=samba.ldift   LDAPADMINPASSt   MMRs   schema-map-openldap-2.3s   backend-schema.schemaRM   R3   Rf   s   ldap://0.0.0.0:%ds   ldap://%s.%s:%ds   -Fs   -hs   -d0iø  s   -Ttests   -nt   0s   -fRg   Rh   sE   conversion from slapd.conf to cn=config failed slapd started with: %ss   's   ' 's.   conversion from slapd.conf to cn=config faileds   cn=config.ldifs   -Tadds   -bs   cn=sambat   stdin(D   RO   RL   R~   R)   R*   R=   R>   R?   R   R,   R‚   R;   t   linked_attributest   keysR   R   t   ldbR4   R    R   R   t   ranget   lenR   RA   t   filtert   splitR   R   t   strt   configdnt   domaindnR   R‰   Rƒ   t	   dnsdomaint   getuidR‹   RP   t   convert_to_openldapRT   RU   t   AssertionErrorRi   RE   R<   RB   Rˆ   Rm   t   listRC   t   extendRG   t   appendRX   RF   t   syst   exitRk   t   callRn   Rs   RJ   t   removeRl   t   PIPER½   R|   (+   R   RL   R~   t   nosync_configt   lnkattrt   refint_attributest   memberof_configt   attt   refint_configR”   t   rest   index_configt   it
   index_attrt   mmr_on_configt   mmr_replicator_aclt   mmr_serverids_configt   mmr_syncrepl_schema_configt   mmr_syncrepl_config_configt   mmr_syncrepl_domaindns_configt   mmr_syncrepl_forestdns_configt   mmr_syncrepl_user_configt   mmr_passt   url_listt   urlt   serveridt   ridt   olc_syncrepl_configt   olc_mmr_configt   olc_serverids_configt   olc_syncrepl_seed_configt   mmrt   cn_sambat   mappingt   backend_schemaRb   t   backend_schema_datat   server_port_stringt   urist	   slapd_cmdt   retcodet   cn_samba_cmdRd   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyRa   _  s€   "				











""""""			!		%$N(   R   R   R   Rn   R   R‹   Ra   (    (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR}   7  s   	t
   FDSBackendc           B   sJ   e  Z d d d d d d d d d d e d d d  „ Z d „  Z d „  Z RS(   c         C   s^  d d l  m } t t |  ƒ j d | d | d | d | d | d | d	 | d
 | d |	 d |
 d | d t d | ƒ | |  _ | |  _ |  j j	 j
 ƒ  |  _ d |  _ t j j |  j d ƒ |  _ t j j |  j d ƒ |  _ t j j |  j d ƒ |  _ t j j |  j d ƒ |  _ t j j |  j d ƒ |  _ t j j |  j d ƒ |  _ t j j |  j d ƒ |  _ t j j |  j d ƒ |  _ t j j |  j d ƒ |  _ | d ƒ |  _ t j j |  j d ƒ |  _ t j d d |  j d |  j d |  j j g d  t d! t  ƒ|  _! |  j! d" k rt" d# ƒ ‚ n  t# |  j$ d$ |  j j% d% | d& ƒ |  j g d' d( d) g ƒ|  _& d  S(*   Niÿÿÿÿ(   R~   R#   R   R   R    R   R:   R;   R<   RA   RB   RE   R.   RF   s   CN=Sambas   fedorads.infs   fedorads-partitions.ldifs   fedorads-sasl.ldifs   fedorads-dna.ldifs   fedorads-pam.ldifs   fedorads-refint.ldifs   fedorads-linked-attributes.ldifs   fedorads-index.ldifs   fedorads-samba.ldifs    ../../examples/LDAP/samba.schemas   samba3.ldifs   bin/oLschema2ldifs   -Is   -Os   -bRg   Rh   i    s!   Unable to convert Samba 3 schema.R   R€   s   schema_samba4.ldift   additional_prefixmaps   1000:1.3.6.1.4.1.7165.2.1s   1001:1.3.6.1.4.1.7165.2.2('   RO   R~   R   Rù   R   R.   t   roott   setup_ds_pathR    t   netbiosnamet   lowert   ldap_instancet   sambadnR=   R>   R?   R   t   fedoradsinft   partitions_ldift	   sasl_ldift   dna_ldift   pam_ldift   refint_ldift   linked_attrs_ldift
   index_ldift
   samba_ldift   samba3_schemat   samba3_ldifRk   RÑ   RÇ   R,   Rn   R÷   t	   ExceptionR
   R:   R   R;   (   R   R#   R   R   R    R   R:   R;   R<   RA   RB   RE   RF   Rû   Rü   R~   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR   c  sP    							c      	   C   s  d d l  m } m } |  j d  k	 r5 d |  j } n d } t | d ƒ |  j i	 |  j d 6|  j d 6|  j	 j
 d 6|  j d	 6|  j	 j d
 6|  j d 6|  j	 j d 6|  j d 6| d 6ƒ t | d ƒ |  j i |  j	 j d 6|  j	 j d 6|  j d 6ƒ t | d ƒ |  j i |  j d 6ƒ t | d ƒ |  j i |  j	 j d
 6|  j d 6t |  j ƒ d 6ƒ t | d ƒ |  j ƒ |  j j ƒ  } t | d ƒ d ƒ } z | j ƒ  } Wd  | j ƒ  Xd } d } d }	 x© | j ƒ  D]› }
 | |
 d  k	 rË| t | d ƒ i t |	 ƒ d 6|
 d 6ƒ 7} | t | d ƒ i |
 d 6| |
 d 6ƒ 7} | t | d  ƒ i |
 d! 6ƒ 7} |	 d" 7}	 qËqËWt |  j  d# ƒ } z | j! | ƒ Wd  | j ƒ  Xt |  j" d# ƒ } z | j! | ƒ Wd  | j ƒ  Xd$ g } |  j j# j$ d% d& d' |  j	 j d( t% d) | ƒ } xd t& d* t' | ƒ ƒ D]M } | | d$ d* }
 |
 d+ k rHd, }
 n  | t | d  ƒ i |
 d! 6ƒ 7} qWt |  j( d# ƒ } z | j! | ƒ Wd  | j ƒ  Xt | d- ƒ |  j) i |  j d 6|  j d. 6ƒ d/ } d0 } t | | ƒ d ƒ } z |  j j* d1 | j ƒ  ƒ } Wd  | j ƒ  X| d  k	 s*t+ ‚ t t, j- j. |  j | ƒ d# ƒ } z | j! | ƒ Wd  | j ƒ  X|  j/ j0 |  j	 j ƒ t, j- j. |  j d2 |  j ƒ } t1 j2 | t3 ƒ |  j4 d3 | d4 |  j5 g |  _6 |  j6 j7 d5 ƒ t, j- j. |  j d2 |  j d6 ƒ g |  _8 |  j9 rt: j; d* ƒ n  |  j< d  k r<| d7 ƒ ‚ n  t, j- j= |  j< ƒ sj|  j> j? d8 |  j< ƒ n  t@ jA |  j< d9 d: |  j g d; t3 d< tB ƒ} | d* k r²| d= ƒ ‚ n  t@ jA t, j- j. |  j d2 |  j d> ƒ d? |  j d4 |  j) g d; t3 d< tB ƒ} | d* k r| d@ ƒ ‚ n  d  S(A   Niÿÿÿÿ(   RL   R~   s   ServerPort=%dR0   s   fedorads.inft   ROOTt   HOSTNAMER    R¡   R¢   t   LDAP_INSTANCEt   LDAPMANAGERDNt   LDAPMANAGERPASSt
   SERVERPORTs   fedorads-partitions.ldifR£   R¤   t   SAMBADNs   fedorads-sasl.ldifs   fedorads-dna.ldift	   DOMAINSIDs   fedorads-pam.ldifs   fedorads-refint-delete.ldifRM   i   s   fedorads-refint-add.ldift
   ARG_NUMBERt	   LINK_ATTRs   fedorads-linked-attributes.ldifR   R   s   fedorads-index.ldift   ATTRi   Rf   R“   R2   sG   (&(objectclass=attributeSchema)(searchFlags:1.2.840.113556.1.4.803:=1))R/   R1   R”   i    R•   t
   nsUniqueIds   fedorads-samba.ldifRº   s   schema-map-fedora-ds-1.0s
   99_ad.ldifs	   fedora-dss   slapd-s   -Ds   -is   -d0s   start-slapdsi   Fedora DS LDAP-Backend must be setup with path to setup-ds, e.g. --setup-ds-path="/usr/sbin/setup-ds.pl"!s"   Path (%s) to slapd does not exist!s   --silents   --fileRg   Rh   s   setup-ds failedt   ldif2dbs   -ss   ldif2db failed(C   RO   RL   R~   RE   R   R   R  Rû   R<   R    RÈ   R   RÇ   Rÿ   t   ldapmanagerdnRA   R  RÆ   R   R   R  R  RÅ   R:   R  R;   R¾   RP   RT   RU   R¿   R   R  Ri   R  RÀ   R4   R   RÁ   RÂ   R  R	  RÊ   RË   R=   R>   R?   R   t   set_bind_dnR)   R*   R,   RB   RD   Rm   RÎ   RC   RF   RÏ   RÐ   Rü   RJ   R   RV   Rk   RÑ   Rn   (   R   RL   R~   t
   serverportRÕ   Rb   RÙ   R×   RÛ   t   argnumt   attrR”   RÚ   RÜ   Rñ   Rò   Ró   t   fedora_ds_dirR÷   (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyRa   š  sÚ    




		
		
!	7c         C   s·   t  |  j d |  j ƒ} d |  j } t j ƒ  } t j | g t j d ƒ | d <xK |  j j	 |  j j
 |  j j f D]( } t j | | ƒ | _ | j | ƒ qr Wt |  j |  j |  j ƒ S(   NR   s{   (targetattr = "*") (version 3.0;acl "full access to all by samba-admin";allow (all)(userdn = "ldap:///CN=samba-admin,%s");)t   aci(   R   RG   R   R   RÀ   t   Messaget   MessageElementt   FLAG_MOD_REPLACER    RÇ   RÆ   R   t   Dnt   dnt   modifyR   R   R   (   R   R5   R   t   mt   dnstring(    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyR'   9  s    N(   R   R   R   Rn   R   Ra   R'   (    (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyRù   a  s   		3	Ÿ($   t   __doc__t   base64R    RR   RÀ   R=   RÏ   t   uuidRq   R)   Rk   RH   R   R   R   R   R¸   R   R   R   t   samba.credentialsR   R	   t   samba.schemaR
   R  R   t   objectR   R   R   R(   R-   R6   R}   Rù   (    (    (    s;   /usr/lib/python2.7/dist-packages/samba/provision/backend.pyt   <module>   s0   "		$›ÿ +