30
30
from ldap .extop import ExtendedRequest ,ExtendedResponse
31
31
from ldap .compat import reraise
32
32
33
- from ldap import LDAPError
33
+ from ldap import LDAPError , RAISE_ALL
34
34
35
35
PY2 = sys .version_info [0 ] <= 2
36
36
if PY2 :
@@ -96,14 +96,14 @@ class SimpleLDAPObject:
96
96
def __init__ (
97
97
self ,uri ,
98
98
trace_level = 0 ,trace_file = None ,trace_stack_limit = 5 ,bytes_mode = None ,
99
- bytes_strictness = None ,
99
+ bytes_strictness = None ,raise_for_result = RAISE_ALL ,
100
100
):
101
101
self ._trace_level = trace_level or ldap ._trace_level
102
102
self ._trace_file = trace_file or ldap ._trace_file
103
103
self ._trace_stack_limit = trace_stack_limit
104
104
self ._uri = uri
105
105
self ._ldap_object_lock = self ._ldap_lock ('opcall' )
106
- self ._l = ldap .functions ._ldap_function_call (ldap ._ldap_module_lock ,_ldap .initialize ,uri )
106
+ self ._l = ldap .functions ._ldap_function_call (ldap ._ldap_module_lock ,_ldap .initialize ,uri , raise_for_result )
107
107
self .timeout = - 1
108
108
self .protocol_version = ldap .VERSION3
109
109
@@ -520,14 +520,16 @@ def compare_ext(self,dn,attr,value,serverctrls=None,clientctrls=None):
520
520
def compare_ext_s (self ,dn ,attr ,value ,serverctrls = None ,clientctrls = None ):
521
521
msgid = self .compare_ext (dn ,attr ,value ,serverctrls ,clientctrls )
522
522
try :
523
- ldap_res = self .result3 (msgid ,all = 1 ,timeout = self .timeout )
523
+ ldap_res = self .result4 (msgid ,all = 1 ,timeout = self .timeout )
524
+ if ldap_res [1 ] == ldap .COMPARE_TRUE .errnum :
525
+ return True
526
+ if ldap_res [1 ] == ldap .COMPARE_FALSE .errnum :
527
+ return False
528
+ return ldap_res
524
529
except ldap .COMPARE_TRUE :
525
530
return True
526
531
except ldap .COMPARE_FALSE :
527
532
return False
528
- raise ldap .PROTOCOL_ERROR (
529
- 'Compare operation returned wrong result: %r' % (ldap_res ,)
530
- )
531
533
532
534
def compare (self ,dn ,attr ,value ):
533
535
return self .compare_ext (dn ,attr ,value ,None ,None )
@@ -576,7 +578,7 @@ def extop(self,extreq,serverctrls=None,clientctrls=None):
576
578
return self ._ldap_call (self ._l .extop ,extreq .requestName ,extreq .encodedRequestValue (),RequestControlTuples (serverctrls ),RequestControlTuples (clientctrls ))
577
579
578
580
def extop_result (self ,msgid = ldap .RES_ANY ,all = 1 ,timeout = None ):
579
- resulttype ,msg ,msgid ,respctrls ,respoid ,respvalue = self .result4 (msgid ,all = 1 ,timeout = self .timeout ,add_ctrls = 1 ,add_intermediates = 1 ,add_extop = 1 )
581
+ msgtype , result ,msg ,msgid ,respctrls ,respoid ,respvalue = self .result4 (msgid ,all = 1 ,timeout = self .timeout ,add_ctrls = 1 ,add_intermediates = 1 ,add_extop = 1 )
580
582
return (respoid ,respvalue )
581
583
582
584
def extop_s (self ,extreq ,serverctrls = None ,clientctrls = None ,extop_resp_class = None ):
@@ -737,39 +739,39 @@ def result(self,msgid=ldap.RES_ANY,all=1,timeout=None):
737
739
If a timeout occurs, a TIMEOUT exception is raised, unless
738
740
polling (timeout = 0), in which case (None, None) is returned.
739
741
"""
740
- resp_type , resp_data , resp_msgid = self .result2 (msgid ,all ,timeout )
741
- return resp_type , resp_data
742
+ msgtype , resp_data , resp_msgid = self .result2 (msgid ,all ,timeout )
743
+ return msgtype , resp_data
742
744
743
745
def result2 (self ,msgid = ldap .RES_ANY ,all = 1 ,timeout = None ):
744
- resp_type , resp_data , resp_msgid , resp_ctrls = self .result3 (msgid ,all ,timeout )
745
- return resp_type , resp_data , resp_msgid
746
+ msgtype , resp_data , resp_msgid , resp_ctrls = self .result3 (msgid ,all ,timeout )
747
+ return msgtype , resp_data , resp_msgid
746
748
747
749
def result3 (self ,msgid = ldap .RES_ANY ,all = 1 ,timeout = None ,resp_ctrl_classes = None ):
748
- resp_type , resp_data , resp_msgid , decoded_resp_ctrls , retoid , retval = self .result4 (
750
+ msgtype , result , resp_data , resp_msgid , decoded_resp_ctrls , retoid , retval = self .result4 (
749
751
msgid ,all ,timeout ,
750
752
add_ctrls = 0 ,add_intermediates = 0 ,add_extop = 0 ,
751
753
resp_ctrl_classes = resp_ctrl_classes
752
754
)
753
- return resp_type , resp_data , resp_msgid , decoded_resp_ctrls
755
+ return msgtype , resp_data , resp_msgid , decoded_resp_ctrls
754
756
755
757
def result4 (self ,msgid = ldap .RES_ANY ,all = 1 ,timeout = None ,add_ctrls = 0 ,add_intermediates = 0 ,add_extop = 0 ,resp_ctrl_classes = None ):
756
758
if timeout is None :
757
759
timeout = self .timeout
758
760
ldap_result = self ._ldap_call (self ._l .result4 ,msgid ,all ,timeout ,add_ctrls ,add_intermediates ,add_extop )
759
761
if ldap_result is None :
760
- resp_type , resp_data , resp_msgid , resp_ctrls , resp_name , resp_value = (None ,None ,None ,None ,None ,None )
762
+ resp_type , result , resp_data , resp_msgid , resp_ctrls , resp_name , resp_value = (None , None ,None ,None ,None ,None ,None )
761
763
else :
762
- if len (ldap_result )== 4 :
763
- resp_type , resp_data , resp_msgid , resp_ctrls = ldap_result
764
+ if len (ldap_result )== 5 :
765
+ resp_type , result , resp_data , resp_msgid , resp_ctrls = ldap_result
764
766
resp_name , resp_value = None ,None
765
767
else :
766
- resp_type , resp_data , resp_msgid , resp_ctrls , resp_name , resp_value = ldap_result
768
+ resp_type , result , resp_data , resp_msgid , resp_ctrls , resp_name , resp_value = ldap_result
767
769
if add_ctrls :
768
770
resp_data = [ (t ,r ,DecodeControlTuples (c ,resp_ctrl_classes )) for t ,r ,c in resp_data ]
769
771
decoded_resp_ctrls = DecodeControlTuples (resp_ctrls ,resp_ctrl_classes )
770
772
if resp_data is not None :
771
773
resp_data = self ._bytesify_results (resp_data , with_ctrls = add_ctrls )
772
- return resp_type , resp_data , resp_msgid , decoded_resp_ctrls , resp_name , resp_value
774
+ return resp_type , result , resp_data , resp_msgid , decoded_resp_ctrls , resp_name , resp_value
773
775
774
776
def search_ext (self ,base ,scope ,filterstr = None ,attrlist = None ,attrsonly = 0 ,serverctrls = None ,clientctrls = None ,timeout = - 1 ,sizelimit = 0 ):
775
777
"""
@@ -1086,7 +1088,7 @@ class ReconnectLDAPObject(SimpleLDAPObject):
1086
1088
def __init__ (
1087
1089
self ,uri ,
1088
1090
trace_level = 0 ,trace_file = None ,trace_stack_limit = 5 ,bytes_mode = None ,
1089
- bytes_strictness = None , retry_max = 1 , retry_delay = 60.0
1091
+ bytes_strictness = None , raise_for_result = RAISE_ALL , retry_max = 1 , retry_delay = 60.0
1090
1092
):
1091
1093
"""
1092
1094
Parameters like SimpleLDAPObject.__init__() with these
@@ -1102,7 +1104,8 @@ def __init__(
1102
1104
self ._last_bind = None
1103
1105
SimpleLDAPObject .__init__ (self , uri , trace_level , trace_file ,
1104
1106
trace_stack_limit , bytes_mode ,
1105
- bytes_strictness = bytes_strictness )
1107
+ bytes_strictness = bytes_strictness ,
1108
+ raise_for_result = raise_for_result )
1106
1109
self ._reconnect_lock = ldap .LDAPLock (desc = 'reconnect lock within %s' % (repr (self )))
1107
1110
self ._retry_max = retry_max
1108
1111
self ._retry_delay = retry_delay
0 commit comments