Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
config.getServiceLocationOverrides())
def _search(proto, base, searchFilter):
baseEntry = ldapsyntax.LDAPEntry(client=proto, dn=base)
d=baseEntry.search(filterObject=searchFilter)
return d
d.addCallback(_search, config.getBaseDN(), self._getSearchFilter())
return d
def LDAPFilterSerializer(original, context):
return original.asText()
# TODO need to make this pretty some day.
for c in [
pureldap.LDAPFilter_and,
pureldap.LDAPFilter_or,
pureldap.LDAPFilter_not,
pureldap.LDAPFilter_substrings,
pureldap.LDAPFilter_equalityMatch,
pureldap.LDAPFilter_greaterOrEqual,
pureldap.LDAPFilter_lessOrEqual,
pureldap.LDAPFilter_approxMatch,
pureldap.LDAPFilter_present,
pureldap.LDAPFilter_extensibleMatch,
]:
flat.registerFlattener(LDAPFilterSerializer, c)
class AddressBookResource(rend.Page):
docFactory = loaders.xmlfile(
'searchform.xhtml',
templateDir=os.path.split(os.path.abspath(__file__))[0])
class LDAPFilter_extensibleMatch(LDAPMatchingRuleAssertion):
tag = CLASS_CONTEXT | 0x09
def asText(self):
return '(' + \
(self.type.value if self.type else '') + \
(':dn' if self.dnAttributes and self.dnAttributes.value else '') + \
((':' + self.matchingRule.value) if self.matchingRule else '') + \
':=' + \
self.escaper(self.matchValue.value) + \
')'
class LDAPBERDecoderContext_Filter(BERDecoderContext):
Identities = {
LDAPFilter_and.tag: LDAPFilter_and,
LDAPFilter_or.tag: LDAPFilter_or,
LDAPFilter_not.tag: LDAPFilter_not,
LDAPFilter_equalityMatch.tag: LDAPFilter_equalityMatch,
LDAPFilter_substrings.tag: LDAPFilter_substrings,
LDAPFilter_greaterOrEqual.tag: LDAPFilter_greaterOrEqual,
LDAPFilter_lessOrEqual.tag: LDAPFilter_lessOrEqual,
LDAPFilter_present.tag: LDAPFilter_present,
LDAPFilter_approxMatch.tag: LDAPFilter_approxMatch,
LDAPFilter_extensibleMatch.tag: LDAPFilter_extensibleMatch,
}
LDAP_SCOPE_baseObject = 0
LDAP_SCOPE_singleLevel = 1
LDAP_SCOPE_wholeSubtree = 2
LDAP_DEREF_neverDerefAliases = 0
def _getSearchFilter(self):
filters = []
for attr,value in self.data.items():
if value is not None:
f = ldapfilter.parseMaybeSubstring(attr, value)
filters.append(f)
if not filters:
return None
searchFilter = pureldap.LDAPFilter_and(
[pureldap.LDAPFilter_equalityMatch(
attributeDesc=pureldap.LDAPAttributeDescription('objectClass'),
assertionValue=pureldap.LDAPAssertionValue('addressbookPerson'))]
+ filters)
return searchFilter
timeLimit=0,
typesOnly=0,
callback=None,
controls=None,
return_controls=False):
self._checkState()
d = defer.Deferred()
if filterObject is None and filterText is None:
filterObject = pureldap.LDAPFilterMatchAll
elif filterObject is None and filterText is not None:
filterObject = ldapfilter.parseFilter(filterText)
elif filterObject is not None and filterText is None:
pass
elif filterObject is not None and filterText is not None:
f = ldapfilter.parseFilter(filterText)
filterObject = pureldap.LDAPFilter_and((f, filterObject))
if scope is None:
scope = pureldap.LDAP_SCOPE_wholeSubtree
if derefAliases is None:
derefAliases = pureldap.LDAP_DEREF_neverDerefAliases
if attributes is None:
attributes = ['1.1']
results = []
if callback is None:
cb = results.append
else:
cb = callback
try:
op = pureldap.LDAPSearchRequest(
config.getServiceLocationOverrides())
def _search(proto, base, searchFilter):
baseEntry = ldapsyntax.LDAPEntry(client=proto, dn=base)
d=baseEntry.search(filterObject=searchFilter)
return d
d.addCallback(_search, config.getBaseDN(), self.search)
return d
def LDAPFilterSerializer(original, context):
return original.asText()
# TODO need to make this pretty some day.
for c in [
pureldap.LDAPFilter_and,
pureldap.LDAPFilter_or,
pureldap.LDAPFilter_not,
pureldap.LDAPFilter_substrings,
pureldap.LDAPFilter_equalityMatch,
pureldap.LDAPFilter_greaterOrEqual,
pureldap.LDAPFilter_lessOrEqual,
pureldap.LDAPFilter_approxMatch,
pureldap.LDAPFilter_present,
pureldap.LDAPFilter_extensibleMatch,
]:
flat.registerFlattener(LDAPFilterSerializer, c)
class AddressBookResource(rend.Page):
addSlash = True
docFactory = loaders.xmlfile(
# TODO handle unknown filter name right (old form open in browser etc)
filter_ = config.getSearchFieldByName(k, vars={'input': v})
filt.append(ldapfilter.parseFilter(filter_))
if searchfilter:
try:
filt.append(ldapfilter.parseFilter(searchfilter))
except ldapfilter.InvalidLDAPFilter, e:
raise annotate.ValidateError(
{'searchfilter': str(e), },
partialForm=inevow.IRequest(ctx).args)
if filt:
if len(filt)==1:
query=filt[0]
else:
query=pureldap.LDAPFilter_and(filt)
else:
query=pureldap.LDAPFilterMatchAll
self.data.update(kw)
# annotate.Choice in nevow 0.3 maps choices to a list, and
# passes indexes to this list to client. annotate.Choice in
# 0.4pre converts choice to string and back with callbacks,
# defaulting to str, and leaving the value as string. We
# can't use the 0.4pre mechanism as long as we need 0.3
# compatibility, so work around that by explicitly making sure
# scope is an integer.
scope = int(scope)
self.data['scope'] = scope
self.data['searchfilter'] = searchfilter
def data_servicePasswords(self, ctx, data):
user = ctx.locate(inevow.ISession).getLoggedInRoot().loggedIn
config = interfaces.ILDAPConfig(ctx)
e=ldapsyntax.LDAPEntry(client=user.client, dn=config.getBaseDN())
d = e.search(filterObject=pureldap.LDAPFilter_and([
pureldap.LDAPFilter_equalityMatch(attributeDesc=pureldap.LDAPAttributeDescription('objectClass'),
assertionValue=pureldap.LDAPAssertionValue('serviceSecurityObject')),
pureldap.LDAPFilter_equalityMatch(attributeDesc=pureldap.LDAPAttributeDescription('owner'),
assertionValue=pureldap.LDAPAssertionValue(str(self.dn))),
pureldap.LDAPFilter_present('cn'),
]),
attributes=['cn'])
return d