
    =OOf+                         d Z ddlmZ ddlmZ ddlmZ ddlmZmZ ddl	m
Z
 ddlmZ dd	lmZ  ed
      Zd Zd Zd Zd Zd ZddZddZddZddZddZddZd Zd Zd Zd Zy)
    )	b64encode)datetime   )STRING_TYPES)LDAPLDIFErrorLDAPExtensionError)EntryChangeNotificationControl)decoder)get_config_parameterLDIF_LINE_LENGTHc                 r    | sy| d   dkD  s| d   dv ryd| v sd| v sd| v ry| d   d	k(  ry| D ]	  }|dkD  s	 y y)
NTr      )r   
          :   <   Fr   r   r    )bytes_valuebytes     W/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/ldap3/protocol/rfc2849.pysafe_ldif_stringr   (   so     1~{1~1HH 	K2,k0A 2" #:     c                 h   |sd}t        |t              rt        |d      }|st        |      s3	 t	        |      }t        |t              st        |d      }| dz   |z   }|S t        t        urt        |d      }nt        |      }| dz   |z   }|S # t
        $ r t	        t        |            }Y uw xY w)N zutf-8)encodingasciiz:: : )
isinstancer   	bytearrayr   r   	TypeErrorstrbytes)
descriptorvaluebase64encodedlines        r   _convert_to_ldifr+   ?   s    %&%'2%e,	,&G '3''G4GE!G+ K e0EJED 5(K  	,E
+G	,s   B B10B1c                     g }| rC| D ]>  }d|d   z   }|d|d   rdndz   z  }|d   s |j                  t        ||d   |             @ |S )Nz	control: r       truefalser   )appendr+   )controls
all_base64linescontrolr*   s        r   add_controlsr6   W   sh    E 	MG+DCWQZ6W==Dqz-dGAJ
KL		M Lr   c           	         g }d }| D ]?  }|j                         dk(  s| |   D ]  }|j                  t        |||               |} n | D ]3  }||k7  s	|| v s| |   D ]  }|j                  t        |||               5 |S )Nobjectclass)lowerr1   r+   )
attributesr3   r4   oc_attrattrvals         r   add_attributesr>   c   s    EG ::<=(!$' F-dCDEFG  F7?tz1!$' F-dCDEFF
 Lr   c                 ,    rt        | fd      S | S )Nc                     t        |       S N)	ldif_sort)x
sort_orders    r   <lambda>z!sort_ldif_lines.<locals>.<lambda>z   s    yJ'? r   )key)sorted)r4   rD   s    `r   sort_ldif_linesrH   w   s     EO6%?@YTYYr   Nc                 Z   g }| r| D ]y  }|r|d   dk7  rd|v r>|j                  t        d|d   |             |j                  t        |d   |             nt	        d      |rt        ||      }|j                  d       { |r&|j                  dt        t        |             z          |S )NtypesearchResEntrydnraw_attributesz.unable to convert to LDIF-CONTENT - missing DNr   z# total number of entries: )r1   r+   extendr>   r   rH   r$   len)entriesr3   rD   r4   entrys        r   search_response_to_ldifrR   }   s    E 
	EE&M-==u}-dE$KLM^E2B,CZPQ#$TUU'z:LL
	 LL6S\9JJKLr   c                 $   g }d| v r|j                  t        d| d   |             t        | d   |      }|r|j                  |       |j                  d       |j                  t	        | d   |             |rt        ||      }|S t        d      )NrQ   rL   r2   zchangetype: addr:   z2unable to convert to LDIF-CHANGE-ADD - missing DN )r1   r+   r6   rN   r>   rH   r   rQ   r3   rD   r4   control_liness        r   add_request_to_ldifrV      s    E%%dE'NJGH$U:%6
CLL'&'^E,$7DE#E:6E
 L PQQr   c                     g }d| v rb|j                  t        d| d   |             t        | d   |      }|r|j                  |       |j                  d       |rt	        ||      }|S t        d      )NrQ   rL   r2   zchangetype: deletez5unable to convert to LDIF-CHANGE-DELETE - missing DN r1   r+   r6   rN   rH   r   rT   s        r   delete_request_to_ldifrY      sz    E%%dE'NJGH$U:%6
CLL')*#E:6E L STTr   c           	         g }d| v r|j                  t        d| d   |             t        | d   |      }|r|j                  |       |j                  d       d| v ro| d   D ]g  }|j                  g d|d      dz   |d	   d
   z          |d	   d   D ]$  }|j                  t        |d	   d
   ||             & |j                  d       i |rt	        ||      }|S )NrQ   rL   r2   zchangetype: modifychanges)adddeletereplace	increment	operationr    	attributerJ   r'   -)r1   r+   r6   rN   rH   )rQ   r3   rD   r4   rU   changer'   s          r   modify_request_to_ldifrd      s	   E%%dE'NJGH$U:%6
CLL')*	* "FvkGZ[^bbeklwexy  fA  A  B#K09 cELL!1&2Ef2MuV`!abcS!	"
 #E:6ELr   c                    g }d| v r|j                  t        d| d   |             t        | d   |      }|r|j                  |       d| v r| d   r|j                  d      n|j                  d       |j                  t        d| d   |             |j                  d	| d
   rdndz          d| v r$| d   r|j                  t        d| d   |             |rt	        ||      }|S t        d      )NrQ   rL   r2   newSuperiorzchangetype: modrdnzchangetype: moddnnewrdnnewRdnzdeleteoldrdn: deleteOldRdn10newsuperiorz4unable to convert to LDIF-CHANGE-MODDN - missing DN rX   rT   s        r   modify_dn_request_to_ldifrm      s    E%%dE'NJGH$U:%6
CLL'.;u.D}I])*chcoco  qD  dE%hhLM%n0E3OPE!eM&:LL)-}9MzZ[#E:6E L RSSr   c                     | dk(  rt        |||      }nN| dk(  rt        |||      }n;| dk(  rt        |||      }n(| dk(  rt        |||      }n| dk(  rt	        |||      }ng }g }|D ]  }|r{|j                  |dt                |j                  t        |      t        kD  r?t        t        t        |      t        dz
        D cg c]  }d|||t        z   dz
   z    c}ng        |j                  d	        |S c c}w )
NsearchResponse
addRequest
delRequestmodifyRequestmodDNRequestr   r.   r-   r   )
rR   rV   rY   rd   rm   r1   conf_ldif_line_lengthrN   rO   range)operation_typerP   r3   rD   r4   ldif_recordr*   is           r   operation_to_ldifry      sL   ))'ZH	<	'#GZD	<	'&w
JG	?	*&w
JG	>	))':zJK #tA&;<=  ^a  bf  ^g  j  ^V[\qsvw{s|  T  WX  X  WY   ZQRd1a2G.G!.K&L L   Z  EG  Hr"# 	  Zs   C;
c                 .    | r| j                  dd       | S )Nr   z
version: 1)insert)
ldif_liness    r   add_ldif_headerr}      s    !\*r   c                 t    t        |      D ]  \  }}| s	| j                  |      s|c S  t        |      dz   S )Nr.   )	enumerate
startswithrO   )r*   rD   rx   r&   s       r   rB   rB      s>    ":. :DOOJ/H
 z?Qr   c                    d| v rd| d   v rt               }t        j                  | d   d   d   t                     \  }}|rt	        d      |d   dk(  rd|d<   nD|d   d	k(  rd
|d<   n6|d   dk(  rd|d<   n(|d   dk(  rd|d<   nt	        dt        |d         z         d|v r|d   |d   j                         r|d   nd |d<   d|v r|d   |d   j                         r|d   nd |d<   |S y )Nr2   z2.16.840.1.113730.3.4.7r'   )asn1Specz3unprocessed value in EntryChangeNotificationControl
changeTyper.   r\   r   r]      modify   z	modify dnz%unknown Persistent Search changeType changeNumber
previousDN)dictr   decoder
   r	   r$   hasValue)rc   decodeddecoded_controlunprocesseds       r    decode_persistent_search_controlr     s   V 9VJ=O O&'.~~fZ6HIb6cdk6l  xV  xX  (Y$$%Z[[<(A-$)GL!\*a/$,GL!\*a/$,GL!\*a/$/GL!$%LsSbcoSpOq%qrrESWfEfkz  |J  lK  lW  \k  lz  \{  \D  \D  \F/."A  LPAMQ`A`et  vB  fC  fO  Tc  dp  Tq  Tz  Tz  T| =  BFr   c                 N   dt        j                         j                         z   g}t        |       }|r^|d   r |j	                  dt        |d         z          |j	                  |d          |d   r |j	                  dt        |d         z          |t        d| g      z  }|d d S )	Nz# r   z# change number: r   r   z# previous dn: ro   r   )r   now	isoformatr   r1   r$   ry   )rc   r|   r5   s      r   "persistent_search_response_to_ldifr     s    11334J.v6G>"1C8O4PPQ',/0< /#gl6K2LLM#$4vh??Jcr?r   rA   )FN)__doc__r(   r   r   r   r   core.exceptionsr   r	   protocol.persistentSearchr
   
utils.asn1r   utils.configr   rt   r   r+   r6   r>   rH   rR   rV   rY   rd   rm   ry   r}   rB   r   r   r   r   r   <module>r      s{   2    ? F   / --?@ .0	(Z*$ &(4.r   