Mini Shell
# -*- coding: utf-8 -*-
"""
ldap.controls.readentry - classes for the Read Entry controls
(see RFC 4527)
See https://www.python-ldap.org/ for project details.
"""
import ldap
from pyasn1.codec.ber import encoder,decoder
from ldap.controls import LDAPControl,KNOWN_RESPONSE_CONTROLS
from pyasn1_modules.rfc2251 import AttributeDescriptionList,SearchResultEntry
class ReadEntryControl(LDAPControl):
"""
Base class for read entry control described in RFC 4527
attrList
list of attribute type names requested
Class attributes with values extracted from the response control:
dn
string holding the distinguished name of the LDAP entry
entry
dictionary holding the LDAP entry
"""
def __init__(self,criticality=False,attrList=None):
self.criticality,self.attrList,self.entry = criticality,attrList or [],None
def encodeControlValue(self):
attributeSelection = AttributeDescriptionList()
for i in range(len(self.attrList)):
attributeSelection.setComponentByPosition(i,self.attrList[i])
return encoder.encode(attributeSelection)
def decodeControlValue(self,encodedControlValue):
decodedEntry,_ = decoder.decode(encodedControlValue,asn1Spec=SearchResultEntry())
self.dn = str(decodedEntry[0])
self.entry = {}
for attr in decodedEntry[1]:
self.entry[str(attr[0])] = [ str(attr_value) for attr_value in attr[1] ]
class PreReadControl(ReadEntryControl):
"""
Class for pre-read control described in RFC 4527
attrList
list of attribute type names requested
Class attributes with values extracted from the response control:
dn
string holding the distinguished name of the LDAP entry
before the operation was done by the server
entry
dictionary holding the LDAP entry
before the operation was done by the server
"""
controlType = ldap.CONTROL_PRE_READ
KNOWN_RESPONSE_CONTROLS[PreReadControl.controlType] = PreReadControl
class PostReadControl(ReadEntryControl):
"""
Class for post-read control described in RFC 4527
attrList
list of attribute type names requested
Class attributes with values extracted from the response control:
dn
string holding the distinguished name of the LDAP entry
after the operation was done by the server
entry
dictionary holding the LDAP entry
after the operation was done by the server
"""
controlType = ldap.CONTROL_POST_READ
KNOWN_RESPONSE_CONTROLS[PostReadControl.controlType] = PostReadControl
Zerion Mini Shell 1.0