
    Id                     F    d Z dZddlZddlZ G d dej                        Zy)z3Convenience functions for using the idmap database.restructuredText    Nc                   N     e Zd ZdZdZdZdZ	 	 d	 fd	Zd
 fd	Zd Z	ddZ
 xZS )IDmapDBzThe IDmap database.         c           	      n    || _         ||j                  d      }t        t        |   |||||||       y)zbOpens the IDMap Database.

        For parameter meanings see the super class (samba.Ldb)
        Nz	idmap.ldb)urllpmodules_dirsession_infocredentialsflagsoptions)r   private_pathsuperr   __init__)	selfr
   r   r   r   r   r   r   	__class__s	           -/usr/lib/python3/dist-packages/samba/idmap.pyr   zIDmapDB.__init__#   sD     ;//+.Cgt%#"+3?[`e.5 	& 	7    c                 d    t         t        |   | j                  j	                  |      ||       y )N)r
   r   r   )r   r   connectr   r   )r   r
   r   r   r   s       r   r   zIDmapDB.connect1   s-    gt$)=)=c)B%-4 	% 	6r   c                    | j                  ddt        j                        }|d   j                  d      }t        j                  }|$|d   j                  d      }t        j
                  }t        t        |            dz   }t        j                         }t        j                  | d      |_
        t        j                  t        |      |d      |d<   | j                  |       |S )	zIncrement xidNumber, if not present it create and assign it to the lowerBound

        :return xid can that be used for SID/unixid mapping
        zdistinguishedName=CN=CONFIG )
expressionbasescoper   	xidNumber
lowerBoundr   z	CN=CONFIG)searchldbSCOPE_SUBTREEgetFLAG_MOD_REPLACEFLAG_MOD_ADDintstrMessageDndnMessageElementmodify)r   residflagnewidmsgs         r   increment_xidzIDmapDB.increment_xid5   s    
 kk%B # 1 1  3VZZ$##:QL)B##DCGq kkmk*--c%j$LKC	r   c                    || j                         }d}|| j                  k(  rd}n%|| j                  k(  rd}n|| j                  k(  rd}nyd|d|d|d	|d
|d}| j	                  t        | j                  |            d          y)zSetup a mapping between a sam name and a unix name.

        :param sid: SID of the NT-side of the mapping.
        :param unixname: Unix id to map to, if none supplied the next one will be selected
        Nr   ID_TYPE_UIDID_TYPE_GIDID_TYPE_BOTHz
dn: CN=z
xidNumber: z
objectSid: z
objectClass: sidMap
type: z
cn: z

r   )r3   TYPE_UIDTYPE_GID	TYPE_BOTHaddnext
parse_ldif)r   sidtypeunixidtype_stringmods         r   setup_name_mappingzIDmapDB.setup_name_mappingH   s     >'')F4== 'KT]]"'KT^^#(K FCc+ 	dooc*+A./r   )NNNNNr   N)Nr   N)N)__name__
__module____qualname____doc__r8   r9   r:   r   r   r3   rC   __classcell__)r   s   @r   r   r      s1     HHIIM4876&0r   r   )rG   __docformat__r"   sambaLdbr    r   r   <module>rM      s'   & :" 
 H0eii H0r   