|
Lines 33-38
Link Here
|
| 33 |
import re |
33 |
import re |
| 34 |
from functools import wraps |
34 |
from functools import wraps |
| 35 |
import random |
35 |
import random |
|
|
36 |
import collections |
| 36 |
|
37 |
|
| 37 |
import six |
38 |
import six |
| 38 |
import ldap |
39 |
import ldap |
|
Lines 686-692
class access(object):
Link Here
|
| 686 |
vals = nal.setdefault(key, set()) |
687 |
vals = nal.setdefault(key, set()) |
| 687 |
vals |= set(val) |
688 |
vals |= set(val) |
| 688 |
|
689 |
|
| 689 |
nal = self.__encode_entry([(k, list(v)) for k, v in nal.items()]) |
690 |
nal = self.__encode_entry([(k, list(collections.OrderedDict.fromkeys(v))) for k, v in nal.items()]) |
| 690 |
|
691 |
|
| 691 |
try: |
692 |
try: |
| 692 |
rtype, rdata, rmsgid, resp_ctrls = self.lo.add_ext_s(dn, nal, serverctrls=serverctrls) |
693 |
rtype, rdata, rmsgid, resp_ctrls = self.lo.add_ext_s(dn, nal, serverctrls=serverctrls) |
|
Lines 740-746
class access(object):
Link Here
|
| 740 |
val = None |
741 |
val = None |
| 741 |
else: |
742 |
else: |
| 742 |
continue |
743 |
continue |
| 743 |
ml.append((op, key, val)) |
744 |
ml.append((op, key, list(collections.OrderedDict.fromkeys(val)))) |
| 744 |
ml = self.__encode_entry(ml) |
745 |
ml = self.__encode_entry(ml) |
| 745 |
|
746 |
|
| 746 |
# check if we need to rename the object |
747 |
# check if we need to rename the object |