@@ -89,9 +89,7 @@ def setup_encryption(args)
8989 when :start_tls
9090 request = [ Net ::LDAP ::StartTlsOid . to_ber_contextspecific ( 0 ) ] . to_ber_appsequence ( Net ::LDAP ::PDU ::ExtendedRequest )
9191 write ( request )
92- be = read
93- raise Net ::LDAP ::LdapError , "no start_tls result" if be . nil?
94- pdu = Net ::LDAP ::PDU . new ( be )
92+ pdu = read
9593 raise Net ::LDAP ::LdapError , "no start_tls result" if pdu . nil?
9694 if pdu . result_code . zero?
9795 @conn = self . class . wrap_with_ssl ( @conn )
@@ -117,13 +115,25 @@ def close
117115 #
118116 # - syntax: the BER syntax to use to parse the read data with
119117 #
120- # Returns basic BER objects .
118+ # Returns parsed Net::LDAP::PDU object .
121119 def read ( syntax = Net ::LDAP ::AsnSyntax )
122- instrument "read.net_ldap_connection" , :syntax => syntax do |payload |
123- @conn . read_ber ( syntax ) do |id , content_length |
124- payload [ :object_type_id ] = id
125- payload [ :content_length ] = content_length
120+ ber_object =
121+ instrument "read.net_ldap_connection" , :syntax => syntax do |payload |
122+ @conn . read_ber ( syntax ) do |id , content_length |
123+ payload [ :object_type_id ] = id
124+ payload [ :content_length ] = content_length
125+ end
126126 end
127+
128+ return unless ber_object
129+
130+ instrument "parse_pdu.net_ldap_connection" do |payload |
131+ pdu = payload [ :pdu ] = Net ::LDAP ::PDU . new ( ber_object )
132+
133+ payload [ :message_id ] = pdu . message_id
134+ payload [ :app_tag ] = pdu . app_tag
135+
136+ pdu
127137 end
128138 end
129139 private :read
@@ -181,7 +191,8 @@ def bind_simple(auth)
181191 psw . to_ber_contextspecific ( 0 ) ] . to_ber_appsequence ( 0 )
182192 write ( request )
183193
184- ( be = read and pdu = Net ::LDAP ::PDU . new ( be ) ) or raise Net ::LDAP ::LdapError , "no bind result"
194+ pdu = read
195+ raise Net ::LDAP ::LdapError , "no bind result" unless pdu
185196
186197 pdu
187198 end
@@ -218,7 +229,9 @@ def bind_sasl(auth)
218229 request = [ LdapVersion . to_ber , "" . to_ber , sasl ] . to_ber_appsequence ( 0 )
219230 write ( request )
220231
221- ( be = read and pdu = Net ::LDAP ::PDU . new ( be ) ) or raise Net ::LDAP ::LdapError , "no bind result"
232+ pdu = read
233+ raise Net ::LDAP ::LdapError , "no bind result" unless pdu
234+
222235 return pdu unless pdu . result_code == 14 # saslBindInProgress
223236 raise Net ::LDAP ::LdapError , "sasl-challenge overflow" if ( ( n += 1 ) > MaxSaslChallenges )
224237
@@ -395,7 +408,7 @@ def search(args = {})
395408 result_pdu = nil
396409 controls = [ ]
397410
398- while ( be = read ) && ( pdu = Net :: LDAP :: PDU . new ( be ) )
411+ while pdu = read
399412 case pdu . app_tag
400413 when Net ::LDAP ::PDU ::SearchReturnedData
401414 n_results += 1
@@ -500,7 +513,11 @@ def modify(args)
500513 ops . to_ber_sequence ] . to_ber_appsequence ( 6 )
501514 write ( request )
502515
503- ( be = read ) && ( pdu = Net ::LDAP ::PDU . new ( be ) ) && ( pdu . app_tag == Net ::LDAP ::PDU ::ModifyResponse ) or raise Net ::LDAP ::LdapError , "response missing or invalid"
516+ pdu = read
517+
518+ if !pdu || pdu . app_tag != Net ::LDAP ::PDU ::ModifyResponse
519+ raise Net ::LDAP ::LdapError , "response missing or invalid"
520+ end
504521
505522 pdu
506523 end
@@ -522,10 +539,11 @@ def add(args)
522539 request = [ add_dn . to_ber , add_attrs . to_ber_sequence ] . to_ber_appsequence ( 8 )
523540 write ( request )
524541
525- ( be = read ) &&
526- ( pdu = Net :: LDAP :: PDU . new ( be ) ) &&
527- ( pdu . app_tag == Net ::LDAP ::PDU ::AddResponse ) or
542+ pdu = read
543+
544+ if ! pdu || pdu . app_tag != Net ::LDAP ::PDU ::AddResponse
528545 raise Net ::LDAP ::LdapError , "response missing or invalid"
546+ end
529547
530548 pdu
531549 end
@@ -544,9 +562,11 @@ def rename(args)
544562
545563 write ( request . to_ber_appsequence ( 12 ) )
546564
547- ( be = read ) &&
548- ( pdu = Net ::LDAP ::PDU . new ( be ) ) && ( pdu . app_tag == Net ::LDAP ::PDU ::ModifyRDNResponse ) or
549- raise Net ::LDAP ::LdapError . new ( "response missing or invalid" )
565+ pdu = read
566+
567+ if !pdu || pdu . app_tag != Net ::LDAP ::PDU ::ModifyRDNResponse
568+ raise Net ::LDAP ::LdapError . new "response missing or invalid"
569+ end
550570
551571 pdu
552572 end
@@ -560,7 +580,11 @@ def delete(args)
560580 request = dn . to_s . to_ber_application_string ( 10 )
561581 write ( request , controls )
562582
563- ( be = read ) && ( pdu = Net ::LDAP ::PDU . new ( be ) ) && ( pdu . app_tag == Net ::LDAP ::PDU ::DeleteResponse ) or raise Net ::LDAP ::LdapError , "response missing or invalid"
583+ pdu = read
584+
585+ if !pdu || pdu . app_tag != Net ::LDAP ::PDU ::DeleteResponse
586+ raise Net ::LDAP ::LdapError , "response missing or invalid"
587+ end
564588
565589 pdu
566590 end
0 commit comments