mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
ipaldap: properly escape raw binary values in LDAP filters
Manually escape each byte in the value, do not use ldap.filter.escape_filter_chars() as it does not work with bytes in Python 3. https://fedorahosted.org/freeipa/ticket/4985 Reviewed-By: Martin Basti <mbasti@redhat.com> Reviewed-By: Christian Heimes <cheimes@redhat.com>
This commit is contained in:
committed by
Martin Basti
parent
ccea23138b
commit
84a9611cb8
@@ -19,6 +19,7 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import binascii
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
@@ -1245,8 +1246,10 @@ class LDAPClient(object):
|
|||||||
return cls.combine_filters(flts, rules)
|
return cls.combine_filters(flts, rules)
|
||||||
elif value is not None:
|
elif value is not None:
|
||||||
if isinstance(value, bytes):
|
if isinstance(value, bytes):
|
||||||
if six.PY3:
|
value = binascii.hexlify(value).decode('ascii')
|
||||||
value = value.decode('raw_unicode_escape')
|
# value[-2:0] is empty string for the initial '\\'
|
||||||
|
value = u'\\'.join(
|
||||||
|
value[i:i+2] for i in six.moves.range(-2, len(value), 2))
|
||||||
else:
|
else:
|
||||||
value = value_to_utf8(value)
|
value = value_to_utf8(value)
|
||||||
value = ldap.filter.escape_filter_chars(value)
|
value = ldap.filter.escape_filter_chars(value)
|
||||||
|
Reference in New Issue
Block a user