scashin133-net-ldap 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.bundle/config +2 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +29 -0
- data/Manifest.txt +4 -0
- data/Rakefile +1 -1
- data/lib/net/ldap.rb +18 -15
- data/lib/net/ldap/filter.rb +61 -0
- data/lib/net/ldap/pdu.rb +1 -0
- data/spec/spec_helper.rb +1 -2
- data/spec/unit/ber/ber_spec.rb +4 -3
- data/spec/unit/ldap/filter_spec.rb +36 -1
- data/test/test_rename.rb +79 -0
- metadata +23 -34
data/.bundle/config
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -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)
|
data/Manifest.txt
CHANGED
@@ -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
data/lib/net/ldap.rb
CHANGED
@@ -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.
|
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 =
|
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::
|
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::
|
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::
|
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::
|
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::
|
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::
|
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::
|
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
|
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
|
-
|
1516
|
-
|
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(
|
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::
|
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
|
data/lib/net/ldap/filter.rb
CHANGED
@@ -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
|
data/lib/net/ldap/pdu.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
data/spec/unit/ber/ber_spec.rb
CHANGED
@@ -4,12 +4,13 @@ require 'net/ber'
|
|
4
4
|
require 'net/ldap'
|
5
5
|
|
6
6
|
describe "BER encoding of" do
|
7
|
-
|
8
|
-
|
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
|
data/test/test_rename.rb
ADDED
@@ -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:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
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:
|
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: &
|
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: *
|
40
|
+
version_requirements: *id001
|
57
41
|
- !ruby/object:Gem::Dependency
|
58
42
|
name: hanna
|
59
43
|
prerelease: false
|
60
|
-
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: *
|
56
|
+
version_requirements: *id002
|
73
57
|
- !ruby/object:Gem::Dependency
|
74
58
|
name: hoe-git
|
75
59
|
prerelease: false
|
76
|
-
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: *
|
70
|
+
version_requirements: *id003
|
87
71
|
- !ruby/object:Gem::Dependency
|
88
72
|
name: metaid
|
89
73
|
prerelease: false
|
90
|
-
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: *
|
84
|
+
version_requirements: *id004
|
101
85
|
- !ruby/object:Gem::Dependency
|
102
86
|
name: hoe
|
103
87
|
prerelease: false
|
104
|
-
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:
|
93
|
+
hash: 47
|
110
94
|
segments:
|
111
95
|
- 2
|
112
|
-
-
|
113
|
-
-
|
114
|
-
version: 2.
|
96
|
+
- 8
|
97
|
+
- 0
|
98
|
+
version: 2.8.0
|
115
99
|
type: :development
|
116
|
-
version_requirements: *
|
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
|