Skip to content

Commit e559d8f

Browse files
committed
Extract wire write/read calls
This will make it easier to add instrumentation hooks. It also reduces the amount of duplication (for read, specifically).
1 parent f0a9514 commit e559d8f

File tree

1 file changed

+26
-16
lines changed

1 file changed

+26
-16
lines changed

lib/net/ldap.rb

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,8 +1218,8 @@ def setup_encryption(args)
12181218
msgid = next_msgid.to_ber
12191219
request = [Net::LDAP::StartTlsOid.to_ber_contextspecific(0)].to_ber_appsequence(Net::LDAP::PDU::ExtendedRequest)
12201220
request_pkt = [msgid, request].to_ber_sequence
1221-
@conn.write request_pkt
1222-
be = @conn.read_ber(Net::LDAP::AsnSyntax)
1221+
write request_pkt
1222+
be = read
12231223
raise Net::LDAP::LdapError, "no start_tls result" if be.nil?
12241224
pdu = Net::LDAP::PDU.new(be)
12251225
raise Net::LDAP::LdapError, "no start_tls result" if pdu.nil?
@@ -1243,6 +1243,16 @@ def close
12431243
@conn = nil
12441244
end
12451245

1246+
def read
1247+
@conn.read_ber(Net::LDAP::AsnSyntax)
1248+
end
1249+
private :read
1250+
1251+
def write(packet)
1252+
@conn.write(packet)
1253+
end
1254+
private :write
1255+
12461256
def next_msgid
12471257
@msgid ||= 0
12481258
@msgid += 1
@@ -1278,9 +1288,9 @@ def bind_simple(auth)
12781288
request = [LdapVersion.to_ber, user.to_ber,
12791289
psw.to_ber_contextspecific(0)].to_ber_appsequence(0)
12801290
request_pkt = [msgid, request].to_ber_sequence
1281-
@conn.write request_pkt
1291+
write request_pkt
12821292

1283-
(be = @conn.read_ber(Net::LDAP::AsnSyntax) and pdu = Net::LDAP::PDU.new(be)) or raise Net::LDAP::LdapError, "no bind result"
1293+
(be = read and pdu = Net::LDAP::PDU.new(be)) or raise Net::LDAP::LdapError, "no bind result"
12841294

12851295
pdu
12861296
end
@@ -1317,9 +1327,9 @@ def bind_sasl(auth)
13171327
sasl = [mech.to_ber, cred.to_ber].to_ber_contextspecific(3)
13181328
request = [LdapVersion.to_ber, "".to_ber, sasl].to_ber_appsequence(0)
13191329
request_pkt = [msgid, request].to_ber_sequence
1320-
@conn.write request_pkt
1330+
write request_pkt
13211331

1322-
(be = @conn.read_ber(Net::LDAP::AsnSyntax) and pdu = Net::LDAP::PDU.new(be)) or raise Net::LDAP::LdapError, "no bind result"
1332+
(be = read and pdu = Net::LDAP::PDU.new(be)) or raise Net::LDAP::LdapError, "no bind result"
13231333
return pdu unless pdu.result_code == 14 # saslBindInProgress
13241334
raise Net::LDAP::LdapError, "sasl-challenge overflow" if ((n += 1) > MaxSaslChallenges)
13251335

@@ -1483,12 +1493,12 @@ def search(args = {})
14831493
controls = controls.empty? ? nil : controls.to_ber_contextspecific(0)
14841494

14851495
pkt = [next_msgid.to_ber, request, controls].compact.to_ber_sequence
1486-
@conn.write pkt
1496+
write pkt
14871497

14881498
result_pdu = nil
14891499
controls = []
14901500

1491-
while (be = @conn.read_ber(Net::LDAP::AsnSyntax)) && (pdu = Net::LDAP::PDU.new(be))
1501+
while (be = read) && (pdu = Net::LDAP::PDU.new(be))
14921502
case pdu.app_tag
14931503
when 4 # search-data
14941504
n_results += 1
@@ -1584,9 +1594,9 @@ def modify(args)
15841594
request = [ modify_dn.to_ber,
15851595
ops.to_ber_sequence ].to_ber_appsequence(6)
15861596
pkt = [ next_msgid.to_ber, request ].to_ber_sequence
1587-
@conn.write pkt
1597+
write pkt
15881598

1589-
(be = @conn.read_ber(Net::LDAP::AsnSyntax)) && (pdu = Net::LDAP::PDU.new(be)) && (pdu.app_tag == 7) or raise Net::LDAP::LdapError, "response missing or invalid"
1599+
(be = read) && (pdu = Net::LDAP::PDU.new(be)) && (pdu.app_tag == 7) or raise Net::LDAP::LdapError, "response missing or invalid"
15901600

15911601
pdu
15921602
end
@@ -1607,9 +1617,9 @@ def add(args)
16071617

16081618
request = [add_dn.to_ber, add_attrs.to_ber_sequence].to_ber_appsequence(8)
16091619
pkt = [next_msgid.to_ber, request].to_ber_sequence
1610-
@conn.write pkt
1620+
write pkt
16111621

1612-
(be = @conn.read_ber(Net::LDAP::AsnSyntax)) &&
1622+
(be = read) &&
16131623
(pdu = Net::LDAP::PDU.new(be)) &&
16141624
(pdu.app_tag == 9) or
16151625
raise Net::LDAP::LdapError, "response missing or invalid"
@@ -1630,9 +1640,9 @@ def rename(args)
16301640
request << new_superior.to_ber_contextspecific(0) unless new_superior == nil
16311641

16321642
pkt = [next_msgid.to_ber, request.to_ber_appsequence(12)].to_ber_sequence
1633-
@conn.write pkt
1643+
write pkt
16341644

1635-
(be = @conn.read_ber(Net::LDAP::AsnSyntax)) &&
1645+
(be = read) &&
16361646
(pdu = Net::LDAP::PDU.new( be )) && (pdu.app_tag == 13) or
16371647
raise Net::LDAP::LdapError.new( "response missing or invalid" )
16381648

@@ -1647,9 +1657,9 @@ def delete(args)
16471657
controls = args.include?(:control_codes) ? args[:control_codes].to_ber_control : nil #use nil so we can compact later
16481658
request = dn.to_s.to_ber_application_string(10)
16491659
pkt = [next_msgid.to_ber, request, controls].compact.to_ber_sequence
1650-
@conn.write pkt
1660+
write pkt
16511661

1652-
(be = @conn.read_ber(Net::LDAP::AsnSyntax)) && (pdu = Net::LDAP::PDU.new(be)) && (pdu.app_tag == 11) or raise Net::LDAP::LdapError, "response missing or invalid"
1662+
(be = read) && (pdu = Net::LDAP::PDU.new(be)) && (pdu.app_tag == 11) or raise Net::LDAP::LdapError, "response missing or invalid"
16531663

16541664
pdu
16551665
end

0 commit comments

Comments
 (0)