a
    “I_û  ã                   @   s.   d Z dZddlZddlZG dd„ dejƒZdS )z3Convenience functions for using the idmap database.ZrestructuredTexté    Nc                       sN   e Zd ZdZdZdZdZd‡ fdd„	Zd‡ fd	d
„	Zdd„ Z	ddd„Z
‡  ZS )ÚIDmapDBzThe IDmap database.é   é   é   Nr   c              	      s:   || _ |du r| d¡}tt| ƒj|||||||d dS )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__© ú-/usr/lib/python3/dist-packages/samba/idmap.pyr   #   s    
þzIDmapDB.__init__c                    s"   t t| ƒj| j |¡||d d S )N)r   r   r   )r   r   Úconnectr   r   )r   r   r   r   r   r   r   r   1   s    ÿzIDmapDB.connectc                 C   sŒ   | j ddtjd}|d  d¡}tj}|du rB|d  d¡}tj}tt|ƒƒd }t ¡ }t 	| d	¡|_
t t|ƒ|d¡|d< |  |¡ |S )
z“Increment 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Ú )Z
expressionÚbaseZscoper   Z	xidNumberNZ
lowerBoundr   z	CN=CONFIG)ÚsearchÚldbZSCOPE_SUBTREEÚgetZFLAG_MOD_REPLACEZFLAG_MOD_ADDÚintÚstrZMessageZDnZdnZMessageElementZmodify)r   ÚresÚidÚflagZnewidÚmsgr   r   r   Úincrement_xid5   s    ÿ
zIDmapDB.increment_xidc                 C   sv   |du r|   ¡ }d}|| jkr$d}n$|| jkr4d}n|| jkrDd}ndS d|||||f }|  t|  |¡ƒd ¡ dS )zÏSetup 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   ZID_TYPE_UIDZID_TYPE_GIDZID_TYPE_BOTHzL
dn: CN=%s
xidNumber: %s
objectSid: %s
objectClass: sidMap
type: %s
cn: %s

r   )r!   ÚTYPE_UIDÚTYPE_GIDÚ	TYPE_BOTHÚaddÚnextZ
parse_ldif)r   ZsidÚtypeZunixidZtype_stringÚmodr   r   r   Úsetup_name_mappingH   s    


ø	zIDmapDB.setup_name_mapping)NNNNNr   N)Nr   N)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   r#   r$   r   r   r!   r)   Ú__classcell__r   r   r   r   r      s     ÿr   )r-   Z__docformat__r   ZsambaZLdbr   r   r   r   r   Ú<module>   s   