mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Check normalization only for IDNA domains
Backward compability with older IPA versions which allow to use uppper case. Only IDNA domains will be checked. https://fedorahosted.org/freeipa/ticket/4382 Reviewed-By: Martin Kosek <mkosek@redhat.com> Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
This commit is contained in:
parent
fdef2e1bd8
commit
152c8f210b
@ -1961,16 +1961,21 @@ class DNSNameParam(Param):
|
||||
error = _('DNS label cannot be longer than 63 characters')
|
||||
except dns.exception.SyntaxError:
|
||||
error = _('invalid domain name')
|
||||
|
||||
#compare if IDN normalized and original domain match
|
||||
#there is N:1 mapping between unicode and IDNA names
|
||||
#user should use normalized names to avoid mistakes
|
||||
normalized_domain_name = encodings.idna.nameprep(value)
|
||||
if value != normalized_domain_name:
|
||||
error = _("domain name '%(domain)s' and normalized domain name"
|
||||
" '%(normalized)s' do not match. Please use only"
|
||||
" normalized domains") % {'domain': value,
|
||||
'normalized': normalized_domain_name}
|
||||
else:
|
||||
#compare if IDN normalized and original domain match
|
||||
#there is N:1 mapping between unicode and IDNA names
|
||||
#user should use normalized names to avoid mistakes
|
||||
labels = re.split(u'[.\uff0e\u3002\uff61]', value, flags=re.UNICODE)
|
||||
try:
|
||||
map(lambda label: label.encode("ascii"), labels)
|
||||
except UnicodeError:
|
||||
# IDNA
|
||||
is_nonnorm = any(encodings.idna.nameprep(x) != x for x in labels)
|
||||
if is_nonnorm:
|
||||
error = _("domain name '%(domain)s' should be normalized to"
|
||||
": %(normalized)s") % {
|
||||
'domain': value,
|
||||
'normalized': '.'.join([encodings.idna.nameprep(x) for x in labels])}
|
||||
if error:
|
||||
raise ConversionError(name=self.get_param_name(), index=index,
|
||||
error=error)
|
||||
|
@ -2504,11 +2504,10 @@ class test_dns(Declarative):
|
||||
|
||||
|
||||
dict(
|
||||
desc='Add A denormalized record to %r in zone %r' % (idnres1, idnzone1),
|
||||
desc='Add A denormalized record in zone %r' % (idnzone1),
|
||||
command=('dnsrecord_add', [idnzone1, u'gro\xdf'], {'arecord': u'172.16.0.1'}),
|
||||
expected=errors.ConversionError(name='name',
|
||||
error=u'domain name \'gro\xdf\' and normalized domain name \'gross\''
|
||||
+ ' do not match. Please use only normalized domains'),
|
||||
error=u'domain name \'gro\xdf\' should be normalized to: gross')
|
||||
),
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user