scashin133-net-ldap 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_DISABLE_SHARED_GEMS: "1"
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'hoe'
4
+ gem 'hoe-git'
5
+
6
+ group :development do
7
+ gem 'metaid'
8
+ gem 'rspec', '~> 2.0'
9
+ gem 'flexmock'
10
+ end
@@ -0,0 +1,29 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.2)
5
+ flexmock (0.8.11)
6
+ hoe (2.8.0)
7
+ rake (>= 0.8.7)
8
+ hoe-git (1.3.0)
9
+ hoe (>= 2.2.0)
10
+ metaid (1.0)
11
+ rake (0.8.7)
12
+ rspec (2.3.0)
13
+ rspec-core (~> 2.3.0)
14
+ rspec-expectations (~> 2.3.0)
15
+ rspec-mocks (~> 2.3.0)
16
+ rspec-core (2.3.1)
17
+ rspec-expectations (2.3.0)
18
+ diff-lcs (~> 1.1.2)
19
+ rspec-mocks (2.3.0)
20
+
21
+ PLATFORMS
22
+ ruby
23
+
24
+ DEPENDENCIES
25
+ flexmock
26
+ hoe
27
+ hoe-git
28
+ metaid
29
+ rspec (~> 2.0)
@@ -1,4 +1,7 @@
1
+ .bundle/config
1
2
  COPYING
3
+ Gemfile
4
+ Gemfile.lock
2
5
  Hacking.rdoc
3
6
  History.txt
4
7
  LICENSE
@@ -36,6 +39,7 @@ test/test_entry.rb
36
39
  test/test_filter.rb
37
40
  test/test_ldif.rb
38
41
  test/test_password.rb
42
+ test/test_rename.rb
39
43
  test/test_snmp.rb
40
44
  test/testdata.ldif
41
45
  testserver/ldapserver.rb
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
1
  require "rubygems"
2
- require 'hanna/rdoctask'
2
+ # require 'hanna/rdoctask'
3
3
  require 'hoe'
4
4
 
5
5
  $LOAD_PATH.unshift('lib')
@@ -246,7 +246,7 @@ require 'net/ldap/entry'
246
246
  # and then keeps it open while it executes a user-supplied block.
247
247
  # Net::LDAP#open closes the connection on completion of the block.
248
248
  class Net::LDAP
249
- VERSION = "0.1.3"
249
+ VERSION = "0.1.4"
250
250
 
251
251
  class LdapError < StandardError; end
252
252
 
@@ -496,7 +496,7 @@ class Net::LDAP
496
496
  # ldap.modify(...)
497
497
  # end
498
498
  def self.open(args)
499
- ldap1 = LDAP.new(args)
499
+ ldap1 = new(args)
500
500
  ldap1.open { |ldap| yield ldap }
501
501
  end
502
502
 
@@ -532,7 +532,7 @@ class Net::LDAP
532
532
  else
533
533
  os.code = 0
534
534
  end
535
- os.message = LDAP.result2string(os.code)
535
+ os.message = Net::LDAP.result2string(os.code)
536
536
  os
537
537
  end
538
538
 
@@ -1170,12 +1170,12 @@ class Net::LDAP::Connection #:nodoc:
1170
1170
  # go here.
1171
1171
  when :start_tls
1172
1172
  msgid = next_msgid.to_ber
1173
- request = [StartTlsOid.to_ber].to_ber_appsequence(Net::LdapPdu::ExtendedRequest)
1173
+ request = [Net::LDAP::StartTlsOid.to_ber].to_ber_appsequence(Net::LDAP::PDU::ExtendedRequest)
1174
1174
  request_pkt = [msgid, request].to_ber_sequence
1175
1175
  @conn.write request_pkt
1176
1176
  be = @conn.read_ber(Net::LDAP::AsnSyntax)
1177
1177
  raise Net::LDAP::LdapError, "no start_tls result" if be.nil?
1178
- pdu = Net::LdapPdu.new(be)
1178
+ pdu = Net::LDAP::PDU.new(be)
1179
1179
  raise Net::LDAP::LdapError, "no start_tls result" if pdu.nil?
1180
1180
  if pdu.result_code.zero?
1181
1181
  @conn = self.class.wrap_with_ssl(@conn)
@@ -1234,7 +1234,7 @@ class Net::LDAP::Connection #:nodoc:
1234
1234
  request_pkt = [msgid, request].to_ber_sequence
1235
1235
  @conn.write request_pkt
1236
1236
 
1237
- (be = @conn.read_ber(Net::LDAP::AsnSyntax) and pdu = Net::LdapPdu.new(be)) or raise Net::LDAP::LdapError, "no bind result"
1237
+ (be = @conn.read_ber(Net::LDAP::AsnSyntax) and pdu = Net::LDAP::PDU.new(be)) or raise Net::LDAP::LdapError, "no bind result"
1238
1238
 
1239
1239
  pdu.result_code
1240
1240
  end
@@ -1273,7 +1273,7 @@ class Net::LDAP::Connection #:nodoc:
1273
1273
  request_pkt = [msgid, request].to_ber_sequence
1274
1274
  @conn.write request_pkt
1275
1275
 
1276
- (be = @conn.read_ber(Net::LDAP::AsnSyntax) and pdu = Net::LdapPdu.new(be)) or raise Net::LDAP::LdapError, "no bind result"
1276
+ (be = @conn.read_ber(Net::LDAP::AsnSyntax) and pdu = Net::LDAP::PDU.new(be)) or raise Net::LDAP::LdapError, "no bind result"
1277
1277
  return pdu.result_code unless pdu.result_code == 14 # saslBindInProgress
1278
1278
  raise Net::LDAP::LdapError, "sasl-challenge overflow" if ((n += 1) > MaxSaslChallenges)
1279
1279
 
@@ -1401,7 +1401,7 @@ class Net::LDAP::Connection #:nodoc:
1401
1401
  result_code = 0
1402
1402
  controls = []
1403
1403
 
1404
- while (be = @conn.read_ber(Net::LDAP::AsnSyntax)) && (pdu = Net::LdapPdu.new(be))
1404
+ while (be = @conn.read_ber(Net::LDAP::AsnSyntax)) && (pdu = Net::LDAP::PDU.new(be))
1405
1405
  case pdu.app_tag
1406
1406
  when 4 # search-data
1407
1407
  n_results += 1
@@ -1478,7 +1478,7 @@ class Net::LDAP::Connection #:nodoc:
1478
1478
  pkt = [next_msgid.to_ber, request].to_ber_sequence
1479
1479
  @conn.write pkt
1480
1480
 
1481
- (be = @conn.read_ber(Net::LDAP::AsnSyntax)) && (pdu = Net::LdapPdu.new(be)) && (pdu.app_tag == 7) or raise Net::LDAP::LdapError, "response missing or invalid"
1481
+ (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"
1482
1482
  pdu.result_code
1483
1483
  end
1484
1484
 
@@ -1500,23 +1500,26 @@ class Net::LDAP::Connection #:nodoc:
1500
1500
  pkt = [next_msgid.to_ber, request].to_ber_sequence
1501
1501
  @conn.write pkt
1502
1502
 
1503
- (be = @conn.read_ber(Net::LDAP::AsnSyntax)) && (pdu = Net::LdapPdu.new(be)) && (pdu.app_tag == 9) or raise Net::LDAP::LdapError, "response missing or invalid"
1503
+ (be = @conn.read_ber(Net::LDAP::AsnSyntax)) && (pdu = Net::LDAP::PDU.new(be)) && (pdu.app_tag == 9) or raise Net::LDAP::LdapError, "response missing or invalid"
1504
1504
  pdu.result_code
1505
1505
  end
1506
1506
 
1507
1507
  #--
1508
1508
  # TODO: need to support a time limit, in case the server fails to respond.
1509
1509
  #++
1510
- def rename(args)
1510
+ def rename args
1511
1511
  old_dn = args[:olddn] or raise "Unable to rename empty DN"
1512
1512
  new_rdn = args[:newrdn] or raise "Unable to rename to empty RDN"
1513
1513
  delete_attrs = args[:delete_attributes] ? true : false
1514
+ new_superior = args[:new_superior]
1514
1515
 
1515
- request = [old_dn.to_ber, new_rdn.to_ber, delete_attrs.to_ber].to_ber_appsequence(12)
1516
- pkt = [next_msgid.to_ber, request].to_ber_sequence
1516
+ request = [old_dn.to_ber, new_rdn.to_ber, delete_attrs.to_ber]
1517
+ request << new_superior.to_ber unless new_superior == nil
1518
+
1519
+ pkt = [next_msgid.to_ber, request.to_ber_appsequence(12)].to_ber_sequence
1517
1520
  @conn.write pkt
1518
1521
 
1519
- (be = @conn.read_ber(Net::LDAP::AsnSyntax)) && (pdu = Net::LdapPdu.new(be)) && (pdu.app_tag == 13) or raise Net::LDAP::LdapError, "response missing or invalid"
1522
+ (be = @conn.read_ber(AsnSyntax)) && (pdu = LdapPdu.new( be )) && (pdu.app_tag == 13) or raise LdapError.new( "response missing or invalid" )
1520
1523
  pdu.result_code
1521
1524
  end
1522
1525
 
@@ -1530,7 +1533,7 @@ class Net::LDAP::Connection #:nodoc:
1530
1533
  pkt = [next_msgid.to_ber, request].to_ber_sequence
1531
1534
  @conn.write pkt
1532
1535
 
1533
- (be = @conn.read_ber(Net::LDAP::AsnSyntax)) && (pdu = Net::LdapPdu.new(be)) && (pdu.app_tag == 11) or raise Net::LDAP::LdapError, "response missing or invalid"
1536
+ (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"
1534
1537
  pdu.result_code
1535
1538
  end
1536
1539
  end # class Connection
@@ -1,3 +1,4 @@
1
+ # Encoding: UTF-8
1
2
  # Copyright (C) 2006 by Francis Cianfrocca and other contributors. All
2
3
  # Rights Reserved.
3
4
  #
@@ -79,6 +80,8 @@ class Net::LDAP::Filter
79
80
  # <tt>mail</tt> value containing the substring "anderson":
80
81
  #
81
82
  # f = Net::LDAP::Filter.eq("mail", "*anderson*")
83
+ #
84
+ # This filter does not perform any escaping
82
85
  def eq(attribute, value)
83
86
  new(:eq, attribute, value)
84
87
  end
@@ -136,10 +139,44 @@ class Net::LDAP::Filter
136
139
  # Creates a Filter object indicating that a particular attribute value
137
140
  # is either not present or does not match a particular string; see
138
141
  # Filter::eq for more information.
142
+ #
143
+ # This filter does not perform any escaping
139
144
  def ne(attribute, value)
140
145
  new(:ne, attribute, value)
141
146
  end
142
147
 
148
+ ##
149
+ # Creates a Filter object indicating that the value of a particular
150
+ # attribute must match a particular string. The attribute value is
151
+ # escaped, so the "*" character is interpreted literally.
152
+ def equals(attribute, value)
153
+ new(:eq, attribute, escape(value))
154
+ end
155
+
156
+ ##
157
+ # Creates a Filter object indicating that the value of a particular
158
+ # attribute must begin with a particular string. The attribute value is
159
+ # escaped, so the "*" character is interpreted literally.
160
+ def begins(attribute, value)
161
+ new(:eq, attribute, escape(value) + "*")
162
+ end
163
+
164
+ ##
165
+ # Creates a Filter object indicating that the value of a particular
166
+ # attribute must end with a particular string. The attribute value is
167
+ # escaped, so the "*" character is interpreted literally.
168
+ def ends(attribute, value)
169
+ new(:eq, attribute, "*" + escape(value))
170
+ end
171
+
172
+ ##
173
+ # Creates a Filter object indicating that the value of a particular
174
+ # attribute must contain a particular string. The attribute value is
175
+ # escaped, so the "*" character is interpreted literally.
176
+ def contains(attribute, value)
177
+ new(:eq, attribute, "*" + escape(value) + "*")
178
+ end
179
+
143
180
  ##
144
181
  # Creates a Filter object indicating that a particular attribute value
145
182
  # is greater than or equal to the specified value.
@@ -207,6 +244,30 @@ class Net::LDAP::Filter
207
244
  alias_method :present, :present?
208
245
  alias_method :pres, :present?
209
246
 
247
+ # http://tools.ietf.org/html/rfc4515 lists these exceptions from UTF1
248
+ # charset for filters. All of the following must be escaped in any normal
249
+ # string using a single backslash ('\') as escape.
250
+ #
251
+ ESCAPES = {
252
+ '!' => '21', # EXCLAMATION = %x21 ; exclamation mark ("!")
253
+ '&' => '26', # AMPERSAND = %x26 ; ampersand (or AND symbol) ("&")
254
+ '*' => '2A', # ASTERISK = %x2A ; asterisk ("*")
255
+ ':' => '3A', # COLON = %x3A ; colon (":")
256
+ '|' => '7C', # VERTBAR = %x7C ; vertical bar (or pipe) ("|")
257
+ '~' => '7E', # TILDE = %x7E ; tilde ("~")
258
+ }
259
+ # Compiled character class regexp using the keys from the above hash.
260
+ ESCAPE_RE = Regexp.new(
261
+ "[" +
262
+ ESCAPES.keys.map { |e| Regexp.escape(e) }.join +
263
+ "]")
264
+
265
+ ##
266
+ # Escape a string for use in an LDAP filter
267
+ def escape(string)
268
+ string.gsub(ESCAPE_RE) { |char| "\\" + ESCAPES[char] }
269
+ end
270
+
210
271
  ##
211
272
  # Converts an LDAP search filter in BER format to an Net::LDAP::Filter
212
273
  # object. The incoming BER object most likely came to us by parsing an
@@ -270,6 +270,7 @@ module Net
270
270
  when "LdapPduError"
271
271
  warn "Net::#{name} has been deprecated. Use Net::LDAP::PDU::Error instead."
272
272
  Net::LDAP::PDU::Error
273
+ when 'LDAP'
273
274
  else
274
275
  super
275
276
  end
@@ -1,6 +1,5 @@
1
1
  require 'net/ldap'
2
- require 'rubygems'
3
2
 
4
- Spec::Runner.configure do |config|
3
+ RSpec.configure do |config|
5
4
  config.mock_with :flexmock
6
5
  end
@@ -4,12 +4,13 @@ require 'net/ber'
4
4
  require 'net/ldap'
5
5
 
6
6
  describe "BER encoding of" do
7
- def properly_encode_and_decode
8
- simple_matcher('properly encode and decode') do |given|
7
+
8
+ RSpec::Matchers.define :properly_encode_and_decode do
9
+ match do |given|
9
10
  given.to_ber.read_ber.should == given
10
11
  end
11
12
  end
12
-
13
+
13
14
  context "arrays" do
14
15
  it "should properly encode/decode []" do
15
16
  [].should properly_encode_and_decode
@@ -44,5 +44,40 @@ describe Net::LDAP::Filter do
44
44
  end
45
45
  end
46
46
  end
47
-
47
+ describe "<- .construct" do
48
+ it "should accept apostrophes in filters (regression)" do
49
+ Net::LDAP::Filter.construct("uid=O'Keefe").to_rfc2254.should == "(uid=O'Keefe)"
50
+ end
51
+ end
52
+
53
+ describe "convenience filter constructors" do
54
+ def eq(attribute, value)
55
+ described_class.eq(attribute, value)
56
+ end
57
+ describe "<- .equals(attr, val)" do
58
+ it "should delegate to .eq with escaping" do
59
+ described_class.equals('dn', 'f*oo').should == eq('dn', 'f\2Aoo')
60
+ end
61
+ end
62
+ describe "<- .begins(attr, val)" do
63
+ it "should delegate to .eq with escaping" do
64
+ described_class.begins('dn', 'f*oo').should == eq('dn', 'f\2Aoo*')
65
+ end
66
+ end
67
+ describe "<- .ends(attr, val)" do
68
+ it "should delegate to .eq with escaping" do
69
+ described_class.ends('dn', 'f*oo').should == eq('dn', '*f\2Aoo')
70
+ end
71
+ end
72
+ describe "<- .contains(attr, val)" do
73
+ it "should delegate to .eq with escaping" do
74
+ described_class.contains('dn', 'f*oo').should == eq('dn', '*f\2Aoo*')
75
+ end
76
+ end
77
+ end
78
+ describe "<- .escape(str)" do
79
+ it "should escape !, &, *, :, | and ~" do
80
+ Net::LDAP::Filter.escape('!&*:|~').should == "\\21\\26\\2A\\3A\\7C\\7E"
81
+ end
82
+ end
48
83
  end
@@ -0,0 +1,79 @@
1
+ require 'common'
2
+
3
+ class TestRename < Test::Unit::TestCase
4
+ def test_the_truth
5
+ assert true
6
+ end
7
+ # Commented out since it assumes you have a live LDAP server somewhere. This
8
+ # will be migrated to the integration specs, as soon as they are ready.
9
+
10
+ # HOST= '10.10.10.71'
11
+ # PORT = 389
12
+ # BASE = "o=test"
13
+ # AUTH = { :method => :simple, :username => "cn=testadmin,#{BASE}", :password => 'password' }
14
+ # BASIC_USER = "cn=jsmith,ou=sales,#{BASE}"
15
+ # RENAMED_USER = "cn=jbrown,ou=sales,#{BASE}"
16
+ # MOVED_USER = "cn=jsmith,ou=marketing,#{BASE}"
17
+ # RENAMED_MOVED_USER = "cn=jjones,ou=marketing,#{BASE}"
18
+ #
19
+ # def setup
20
+ # # create the entries we're going to manipulate
21
+ # Net::LDAP::open(:host => HOST, :port => PORT, :auth => AUTH) do |ldap|
22
+ # if ldap.add(:dn => "ou=sales,#{BASE}", :attributes => { :ou => "sales", :objectclass => "organizationalUnit" })
23
+ # puts "Add failed: #{ldap.get_operation_result.message} - code: #{ldap.get_operation_result.code}"
24
+ # end
25
+ # ldap.add(:dn => "ou=marketing,#{BASE}", :attributes => { :ou => "marketing", :objectclass => "organizationalUnit" })
26
+ # ldap.add(:dn => BASIC_USER, :attributes => { :cn => "jsmith", :objectclass => "inetOrgPerson", :sn => "Smith" })
27
+ # end
28
+ # end
29
+ #
30
+ # def test_rename_entry
31
+ # dn = nil
32
+ # Net::LDAP::open(:host => HOST, :port => PORT, :auth => AUTH) do |ldap|
33
+ # ldap.rename(:olddn => BASIC_USER, :newrdn => "cn=jbrown")
34
+ #
35
+ # ldap.search(:base => RENAMED_USER) do |entry|
36
+ # dn = entry.dn
37
+ # end
38
+ # end
39
+ # assert_equal(RENAMED_USER, dn)
40
+ # end
41
+ #
42
+ # def test_move_entry
43
+ # dn = nil
44
+ # Net::LDAP::open(:host => HOST, :port => PORT, :auth => AUTH) do |ldap|
45
+ # ldap.rename(:olddn => BASIC_USER, :newrdn => "cn=jsmith", :new_superior => "ou=marketing,#{BASE}")
46
+ #
47
+ # ldap.search(:base => MOVED_USER) do |entry|
48
+ # dn = entry.dn
49
+ # end
50
+ # end
51
+ # assert_equal(MOVED_USER, dn)
52
+ # end
53
+ #
54
+ # def test_move_and_rename_entry
55
+ # dn = nil
56
+ # Net::LDAP::open(:host => HOST, :port => PORT, :auth => AUTH) do |ldap|
57
+ # ldap.rename(:olddn => BASIC_USER, :newrdn => "cn=jjones", :new_superior => "ou=marketing,#{BASE}")
58
+ #
59
+ # ldap.search(:base => RENAMED_MOVED_USER) do |entry|
60
+ # dn = entry.dn
61
+ # end
62
+ # end
63
+ # assert_equal(RENAMED_MOVED_USER, dn)
64
+ # end
65
+ #
66
+ # def teardown
67
+ # # delete the entries
68
+ # # note: this doesn't always completely clear up on eDirectory as objects get locked while
69
+ # # the rename/move is being completed on the server and this prevents the delete from happening
70
+ # Net::LDAP::open(:host => HOST, :port => PORT, :auth => AUTH) do |ldap|
71
+ # ldap.delete(:dn => BASIC_USER)
72
+ # ldap.delete(:dn => RENAMED_USER)
73
+ # ldap.delete(:dn => MOVED_USER)
74
+ # ldap.delete(:dn => RENAMED_MOVED_USER)
75
+ # ldap.delete(:dn => "ou=sales,#{BASE}")
76
+ # ldap.delete(:dn => "ou=marketing,#{BASE}")
77
+ # end
78
+ # end
79
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scashin133-net-ldap
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
9
+ - 4
10
+ version: 0.1.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Francis Cianfrocca
@@ -19,29 +19,13 @@ autorequire:
19
19
  bindir: bin
20
20
  cert_chain: []
21
21
 
22
- date: 2010-07-01 00:00:00 -07:00
22
+ date: 2011-01-18 00:00:00 -08:00
23
23
  default_executable:
24
24
  dependencies:
25
- - !ruby/object:Gem::Dependency
26
- name: rubyforge
27
- prerelease: false
28
- requirement: &id001 !ruby/object:Gem::Requirement
29
- none: false
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- hash: 7
34
- segments:
35
- - 2
36
- - 0
37
- - 4
38
- version: 2.0.4
39
- type: :development
40
- version_requirements: *id001
41
25
  - !ruby/object:Gem::Dependency
42
26
  name: archive-tar-minitar
43
27
  prerelease: false
44
- requirement: &id002 !ruby/object:Gem::Requirement
28
+ requirement: &id001 !ruby/object:Gem::Requirement
45
29
  none: false
46
30
  requirements:
47
31
  - - ~>
@@ -53,11 +37,11 @@ dependencies:
53
37
  - 1
54
38
  version: 0.5.1
55
39
  type: :development
56
- version_requirements: *id002
40
+ version_requirements: *id001
57
41
  - !ruby/object:Gem::Dependency
58
42
  name: hanna
59
43
  prerelease: false
60
- requirement: &id003 !ruby/object:Gem::Requirement
44
+ requirement: &id002 !ruby/object:Gem::Requirement
61
45
  none: false
62
46
  requirements:
63
47
  - - ~>
@@ -69,11 +53,11 @@ dependencies:
69
53
  - 2
70
54
  version: 0.1.2
71
55
  type: :development
72
- version_requirements: *id003
56
+ version_requirements: *id002
73
57
  - !ruby/object:Gem::Dependency
74
58
  name: hoe-git
75
59
  prerelease: false
76
- requirement: &id004 !ruby/object:Gem::Requirement
60
+ requirement: &id003 !ruby/object:Gem::Requirement
77
61
  none: false
78
62
  requirements:
79
63
  - - ~>
@@ -83,11 +67,11 @@ dependencies:
83
67
  - 1
84
68
  version: "1"
85
69
  type: :development
86
- version_requirements: *id004
70
+ version_requirements: *id003
87
71
  - !ruby/object:Gem::Dependency
88
72
  name: metaid
89
73
  prerelease: false
90
- requirement: &id005 !ruby/object:Gem::Requirement
74
+ requirement: &id004 !ruby/object:Gem::Requirement
91
75
  none: false
92
76
  requirements:
93
77
  - - ~>
@@ -97,23 +81,23 @@ dependencies:
97
81
  - 1
98
82
  version: "1"
99
83
  type: :development
100
- version_requirements: *id005
84
+ version_requirements: *id004
101
85
  - !ruby/object:Gem::Dependency
102
86
  name: hoe
103
87
  prerelease: false
104
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ requirement: &id005 !ruby/object:Gem::Requirement
105
89
  none: false
106
90
  requirements:
107
91
  - - ">="
108
92
  - !ruby/object:Gem::Version
109
- hash: 21
93
+ hash: 47
110
94
  segments:
111
95
  - 2
112
- - 6
113
- - 1
114
- version: 2.6.1
96
+ - 8
97
+ - 0
98
+ version: 2.8.0
115
99
  type: :development
116
- version_requirements: *id006
100
+ version_requirements: *id005
117
101
  description: Pure Ruby LDAP library.
118
102
  email:
119
103
  - blackhedd@rubyforge.org
@@ -131,7 +115,10 @@ extra_rdoc_files:
131
115
  - README.txt
132
116
  - Hacking.rdoc
133
117
  files:
118
+ - .bundle/config
134
119
  - COPYING
120
+ - Gemfile
121
+ - Gemfile.lock
135
122
  - Hacking.rdoc
136
123
  - History.txt
137
124
  - LICENSE
@@ -169,6 +156,7 @@ files:
169
156
  - test/test_filter.rb
170
157
  - test/test_ldif.rb
171
158
  - test/test_password.rb
159
+ - test/test_rename.rb
172
160
  - test/test_snmp.rb
173
161
  - test/testdata.ldif
174
162
  - testserver/ldapserver.rb
@@ -215,4 +203,5 @@ test_files:
215
203
  - test/test_filter.rb
216
204
  - test/test_ldif.rb
217
205
  - test/test_password.rb
206
+ - test/test_rename.rb
218
207
  - test/test_snmp.rb