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.
- 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
|