Univention Bugzilla – Attachment 9092 Details for
Bug 31494
Unable to search for dnsAlias in computers/* modules
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
31494.patch (text/plain), 5.29 KB, created by
Florian Best
on 2017-08-04 13:49:07 CEST
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Florian Best
Created:
2017-08-04 13:49:07 CEST
Size:
5.29 KB
patch
obsolete
>diff --git a/management/univention-directory-manager-modules/modules/univention/admin/handlers/computers/domaincontroller_master.py b/management/univention-directory-manager-modules/modules/univention/admin/handlers/computers/domaincontroller_master.py >index 62de85a..b6de1fb 100644 >--- a/management/univention-directory-manager-modules/modules/univention/admin/handlers/computers/domaincontroller_master.py >+++ b/management/univention-directory-manager-modules/modules/univention/admin/handlers/computers/domaincontroller_master.py >@@ -659,12 +659,7 @@ def rewrite(filter, mapping): > > def lookup_filter(filter_s=None, lo=None): > filter_s = univention.admin.filter.replace_fqdn_filter(filter_s) >- if str(filter_s).find('(dnsAlias=') != -1: >- filter_s = univention.admin.handlers.dns.alias.lookup_alias_filter(lo, filter_s) >- if filter_s: >- return lookup_filter(filter_s, lo) >- else: >- return None >+ filter_s = univention.admin.handlers.dns.alias.lookup_alias_filter(lo, filter_s) > lookup_filter_obj = \ > univention.admin.filter.conjunction('&', [ > univention.admin.filter.expression('objectClass', 'univentionHost'), >diff --git a/management/univention-directory-manager-modules/modules/univention/admin/handlers/dns/alias.py b/management/univention-directory-manager-modules/modules/univention/admin/handlers/dns/alias.py >index c3b183a..4029bb2 100644 >--- a/management/univention-directory-manager-modules/modules/univention/admin/handlers/dns/alias.py >+++ b/management/univention-directory-manager-modules/modules/univention/admin/handlers/dns/alias.py >@@ -134,8 +134,7 @@ def _ldap_post_remove(self): > self._updateZone() > > >-def lookup(co, lo, filter_s, base='', superordinate=None, scope="sub", unique=False, required=False, timeout=-1, sizelimit=0): >- >+def _lookup_filter(filter_s=None, lo=None): # don't expose as lookup_filter because the superordinate argument is missing! > filter = univention.admin.filter.conjunction('&', [ > univention.admin.filter.expression('objectClass', 'dNSZone'), > univention.admin.filter.conjunction('!', [univention.admin.filter.expression('relativeDomainName', '@')]), >@@ -146,14 +145,19 @@ def lookup(co, lo, filter_s, base='', superordinate=None, scope="sub", unique=Fa > univention.admin.filter.expression('cNAMERecord', '*') > ]) > >- if superordinate: >- filter.expressions.append(univention.admin.filter.expression('zoneName', superordinate.mapping.mapValue('zone', superordinate['zone']))) >- > if filter_s: > filter_p = univention.admin.filter.parse(filter_s) > univention.admin.filter.walk(filter_p, univention.admin.mapping.mapRewrite, arg=mapping) > filter.expressions.append(filter_p) > >+ return filter >+ >+ >+def lookup(co, lo, filter_s, base='', superordinate=None, scope="sub", unique=False, required=False, timeout=-1, sizelimit=0): >+ filter = _lookup_filter(filter_s) >+ if superordinate: >+ filter.expressions.append(univention.admin.filter.expression('zoneName', superordinate.mapping.mapValue('zone', superordinate['zone']))) >+ > res = [] > for dn, attrs in lo.search(unicode(filter), base, scope, [], unique, required, timeout, sizelimit): > res.append((object(co, lo, None, dn=dn, superordinate=superordinate, attributes=attrs))) >@@ -166,29 +170,15 @@ def identify(dn, attr, canonical=0): > > > def lookup_alias_filter(lo, filter_s): >- _re = re.compile('(.*)\(dnsAlias=([^=,]+)\)(.*)') >- match = _re.match(str(filter_s)) >- filterlist = [] >- if match: >- filter_p = univention.admin.filter.parse('name=%s' % match.group(2)) >- univention.admin.filter.walk(filter_p, univention.admin.mapping.mapRewrite, arg=mapping) # map property to ldap attribute >- alias_filter = univention.admin.filter.conjunction('&', [ # from dns/alias.lookup >- univention.admin.filter.expression('objectClass', 'dNSZone'), >- univention.admin.filter.conjunction('!', [univention.admin.filter.expression('relativeDomainName', '@')]), >- univention.admin.filter.conjunction('!', [univention.admin.filter.expression('zoneName', '*.in-addr.arpa')]), >- univention.admin.filter.expression('CNAMERecord', '*') >- ]) >- alias_filter.expressions.append(filter_p) >+ alias_pattern = re.compile('(?:^|\()dnsAlias=([^)]+)($|\))', flags=re.I) >+ >+ def _replace_alias_filter(match): >+ alias_filter = _lookup_filter('name=%s' % match.group(1), lo) > alias_filter_s = unicode(alias_filter) >- alias_base = unicode(lo.base) # std dns container might be a better choice >- for dn, attrs in lo.search(base=alias_base, scope='sub', filter=alias_filter_s, attr=['cNAMERecord']): >- cname = attrs['cNAMERecord'][0] >- cn_filter = filter_format('(cn=%s)', [cname.split('.', 1)[0]]) >- if cn_filter not in filterlist: >- filterlist.append(cn_filter) >- if len(filterlist) > 0: >- return match.group(1) + '(|' + string.join(filterlist, '') + ')' + match.group(3) >- else: >- return '' >- else: >- return filter_s >+ alias_base = unicode(lo.base) # standard dns container might be a better choice >+ >+ unmatchable_filter = '(&(cn=NOT)(!(cn=NOT)))' # if no computers for aliases found, return an impossible filter! >+ alias_replaced = ''.join(set(filter_format('(cn=%s)', [attrs['cNAMERecord'][0].split('.', 1)[0]]) for dn, attrs in lo.search(base=alias_base, scope='sub', filter=alias_filter_s, attr=['cNAMERecord']))) >+ return '(|%s)' % (alias_replaced,) if alias_replaced else unmatchable_filter >+ >+ return alias_pattern.sub(_replace_alias_filter, str(filter_s))
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 31494
: 9092