ldap_fluff 0.1.4 → 0.1.7

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.

Potentially problematic release.


This version of ldap_fluff might be problematic. Click here for more details.

@@ -58,6 +58,26 @@ class LdapFluff::ActiveDirectory
58
58
  end
59
59
  end
60
60
 
61
+ def user_exists?(uid)
62
+ begin
63
+ service_bind
64
+ user = @member_service.find_user(uid)
65
+ rescue MemberService::UIDNotFoundException
66
+ return false
67
+ end
68
+ return true
69
+ end
70
+
71
+ def group_exists?(gid)
72
+ begin
73
+ service_bind
74
+ group = @member_service.find_group(gid)
75
+ rescue MemberService::GIDNotFoundException
76
+ return false
77
+ end
78
+ return true
79
+ end
80
+
61
81
  class UnauthenticatedActiveDirectoryException < StandardError
62
82
  end
63
83
  end
@@ -13,9 +13,20 @@ class LdapFluff::ActiveDirectory::MemberService
13
13
  # get a list [] of ldap groups for a given user
14
14
  # in active directory, this means a recursive lookup
15
15
  def find_user_groups(uid)
16
+ data = find_user(uid)
17
+ _groups_from_ldap_data(data.first)
18
+ end
19
+
20
+ def find_user(uid)
16
21
  data = @ldap.search(:filter => name_filter(uid))
17
22
  raise UIDNotFoundException if (data == nil || data.empty?)
18
- _groups_from_ldap_data(data.first)
23
+ data
24
+ end
25
+
26
+ def find_group(gid)
27
+ data = @ldap.search(:filter => group_filter(gid), :base => @group_base)
28
+ raise GIDNotFoundException if (data == nil || data.empty?)
29
+ data
19
30
  end
20
31
 
21
32
  # return the :memberof attrs + parents, recursively
@@ -72,4 +83,7 @@ class LdapFluff::ActiveDirectory::MemberService
72
83
 
73
84
  class UIDNotFoundException < StandardError
74
85
  end
86
+
87
+ class GIDNotFoundException < StandardError
88
+ end
75
89
  end
@@ -58,6 +58,26 @@ class LdapFluff::FreeIPA
58
58
  end
59
59
  end
60
60
 
61
+ def user_exists?(uid)
62
+ begin
63
+ service_bind
64
+ user = @member_service.find_user(uid)
65
+ rescue MemberService::UIDNotFoundException
66
+ return false
67
+ end
68
+ return true
69
+ end
70
+
71
+ def group_exists?(gid)
72
+ begin
73
+ service_bind
74
+ group = @member_service.find_group(gid)
75
+ rescue MemberService::GIDNotFoundException
76
+ return false
77
+ end
78
+ return true
79
+ end
80
+
61
81
  class UnauthenticatedFreeIPAException < StandardError
62
82
  end
63
83
 
@@ -13,18 +13,33 @@ class LdapFluff::FreeIPA::MemberService
13
13
  # return an ldap user with groups attached
14
14
  # note : this method is not particularly fast for large ldap systems
15
15
  def find_user_groups(uid)
16
- user = @ldap.search(:filter => name_filter(uid))
17
- raise UIDNotFoundException if (user == nil || user.empty?)
16
+ user = find_user(uid)
18
17
  # if group data is missing, they aren't querying with a user
19
18
  # with enough privileges
20
19
  raise InsufficientQueryPrivilegesException if user.size <= 1
21
20
  _group_names_from_cn(user[1][:memberof])
22
21
  end
23
22
 
23
+ def find_user(uid)
24
+ user = @ldap.search(:filter => name_filter(uid))
25
+ raise UIDNotFoundException if (user == nil || user.empty?)
26
+ user
27
+ end
28
+
29
+ def find_group(gid)
30
+ group = @ldap.search(:filter => group_filter(gid), :base => @group_base)
31
+ raise GIDNotFoundException if (group == nil || group.empty?)
32
+ group
33
+ end
34
+
24
35
  def name_filter(uid)
25
36
  Net::LDAP::Filter.eq("uid",uid)
26
37
  end
27
38
 
39
+ def group_filter(gid)
40
+ Net::LDAP::Filter.eq("cn",gid)
41
+ end
42
+
28
43
  def _group_names_from_cn(grouplist)
29
44
  p = Proc.new { |g| g.sub(/.*?cn=(.*?),.*/, '\1') }
30
45
  grouplist.collect(&p)
@@ -33,6 +48,9 @@ class LdapFluff::FreeIPA::MemberService
33
48
  class UIDNotFoundException < StandardError
34
49
  end
35
50
 
51
+ class GIDNotFoundException < StandardError
52
+ end
53
+
36
54
  class InsufficientQueryPrivilegesException < StandardError
37
55
  end
38
56
  end
@@ -1,3 +1,4 @@
1
+ require 'rubygems'
1
2
  require 'net/ldap'
2
3
 
3
4
  class LdapFluff
@@ -43,4 +44,14 @@ class LdapFluff
43
44
  @ldap.is_in_groups(uid, grouplist, true)
44
45
  end
45
46
 
47
+ # return true if uid exists
48
+ def valid_user?(uid)
49
+ @ldap.user_exists? uid
50
+ end
51
+
52
+ # return true if group exists
53
+ def valid_group?(gid)
54
+ @ldap.group_exists? gid
55
+ end
56
+
46
57
  end
@@ -33,4 +33,22 @@ class LdapFluff::Posix
33
33
  (gids.empty? || @member_service.times_in_groups(uid, gids, all) > 0)
34
34
  end
35
35
 
36
+ def user_exists?(uid)
37
+ begin
38
+ user = @member_service.find_user(uid)
39
+ rescue MemberService::UIDNotFoundException
40
+ return false
41
+ end
42
+ return true
43
+ end
44
+
45
+ def group_exists?(gid)
46
+ begin
47
+ group = @member_service.find_group(gid)
48
+ rescue MemberService::GIDNotFoundException
49
+ return false
50
+ end
51
+ return true
52
+ end
53
+
36
54
  end
@@ -14,12 +14,24 @@ class LdapFluff::Posix::MemberService
14
14
  # note : this method is not particularly fast for large ldap systems
15
15
  def find_user_groups(uid)
16
16
  groups = []
17
- @ldap.search(:filter => name_filter(uid), :base => @group_base).each do |entry|
17
+ find_user(uid).each do |entry|
18
18
  groups << entry[:cn][0]
19
19
  end
20
20
  groups
21
21
  end
22
22
 
23
+ def find_user(uid)
24
+ user = @ldap.search(:filter => name_filter(uid), :base => @group_base)
25
+ raise UIDNotFoundException if (user == nil || user.empty?)
26
+ user
27
+ end
28
+
29
+ def find_group(gid)
30
+ group = @ldap.search(:filter => group_filter(gid), :base => @group_base)
31
+ raise GIDNotFoundException if (group == nil || group.empty?)
32
+ group
33
+ end
34
+
23
35
  def times_in_groups(uid, gids, all)
24
36
  matches = 0
25
37
  filters = []
@@ -53,4 +65,10 @@ class LdapFluff::Posix::MemberService
53
65
  return filter
54
66
  end
55
67
  end
68
+
69
+ class UIDNotFoundException < StandardError
70
+ end
71
+
72
+ class GIDNotFoundException < StandardError
73
+ end
56
74
  end
data/lib/ldap_fluff.rb CHANGED
@@ -1,8 +1,8 @@
1
- require 'ldap_fluff/config'
2
- require 'ldap_fluff/ldap_fluff'
3
- require 'ldap_fluff/active_directory'
4
- require 'ldap_fluff/ad_member_service'
5
- require 'ldap_fluff/posix'
6
- require 'ldap_fluff/posix_member_service'
7
- require 'ldap_fluff/freeipa'
8
- require 'ldap_fluff/freeipa_member_service'
1
+ require_relative 'ldap_fluff/config'
2
+ require_relative 'ldap_fluff/ldap_fluff'
3
+ require_relative 'ldap_fluff/active_directory'
4
+ require_relative 'ldap_fluff/ad_member_service'
5
+ require_relative 'ldap_fluff/posix'
6
+ require_relative 'ldap_fluff/posix_member_service'
7
+ require_relative 'ldap_fluff/freeipa'
8
+ require_relative 'ldap_fluff/freeipa_member_service'
@@ -1,4 +1,4 @@
1
- require 'minitest/autorun'
1
+ require_relative './lib/ldap_test_helper'
2
2
 
3
3
  class TestADMemberService < MiniTest::Unit::TestCase
4
4
  include LdapTestHelper
@@ -15,6 +15,10 @@ class TestADMemberService < MiniTest::Unit::TestCase
15
15
  @ldap.expect(:search, ad_parent_payload(1), [:filter => @gfilter, :base => @config.group_base])
16
16
  end
17
17
 
18
+ def basic_group
19
+ @ldap.expect(:search, ad_group_payload, [:filter => ad_group_filter("broze"), :base => @config.group_base])
20
+ end
21
+
18
22
  def nest_deep(n)
19
23
  # add all the expects
20
24
  for i in 1..(n-1)
@@ -82,4 +86,28 @@ class TestADMemberService < MiniTest::Unit::TestCase
82
86
  @ldap.verify
83
87
  end
84
88
 
89
+ def test_find_good_user
90
+ basic_user
91
+ @adms.ldap = @ldap
92
+ assert_equal ad_user_payload, @adms.find_user('john')
93
+ end
94
+
95
+ def test_find_missing_user
96
+ @ldap.expect(:search, nil, [:filter => ad_name_filter("john")])
97
+ @adms.ldap = @ldap
98
+ assert_raises(LdapFluff::ActiveDirectory::MemberService::UIDNotFoundException) { @adms.find_user('john') }
99
+ end
100
+
101
+ def test_find_good_group
102
+ basic_group
103
+ @adms.ldap = @ldap
104
+ assert_equal ad_group_payload, @adms.find_group('broze')
105
+ end
106
+
107
+ def test_find_missing_group
108
+ @ldap.expect(:search, nil, [:filter => ad_group_filter("broze"), :base => @config.group_base])
109
+ @adms.ldap = @ldap
110
+ assert_raises(LdapFluff::ActiveDirectory::MemberService::GIDNotFoundException) { @adms.find_group('broze') }
111
+ end
112
+
85
113
  end
data/test/ad_test.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'minitest/autorun'
1
+ require_relative './lib/ldap_test_helper'
2
2
 
3
3
  class TestAD < MiniTest::Unit::TestCase
4
4
  include LdapTestHelper
@@ -97,4 +97,42 @@ class TestAD < MiniTest::Unit::TestCase
97
97
  bigtime_user
98
98
  assert_equal @ad.is_in_groups("john", ["broskies"],true), true
99
99
  end
100
+
101
+ def test_user_exists
102
+ @md = MiniTest::Mock.new
103
+ @md.expect(:find_user, 'notnilluser', ["john"])
104
+ @ad.member_service = @md
105
+ service_bind
106
+ assert @ad.user_exists?('john')
107
+ end
108
+
109
+ def test_missing_user
110
+ @md = MiniTest::Mock.new
111
+ @md.expect(:find_user, nil, ['john'])
112
+ def @md.find_user uid
113
+ raise LdapFluff::ActiveDirectory::MemberService::UIDNotFoundException
114
+ end
115
+ @ad.member_service = @md
116
+ service_bind
117
+ assert !@ad.user_exists?('john')
118
+ end
119
+
120
+ def test_group_exists
121
+ @md = MiniTest::Mock.new
122
+ @md.expect(:find_group, 'notnillgroup', ["broskies"])
123
+ @ad.member_service = @md
124
+ service_bind
125
+ assert @ad.group_exists?('broskies')
126
+ end
127
+
128
+ def test_missing_group
129
+ @md = MiniTest::Mock.new
130
+ @md.expect(:find_group, nil, ['broskies'])
131
+ def @md.find_group uid
132
+ raise LdapFluff::ActiveDirectory::MemberService::GIDNotFoundException
133
+ end
134
+ @ad.member_service = @md
135
+ service_bind
136
+ assert !@ad.group_exists?('broskies')
137
+ end
100
138
  end
data/test/config_test.rb CHANGED
@@ -1,5 +1,4 @@
1
- require 'minitest/autorun'
2
- require 'ldap_fluff'
1
+ require_relative './lib/ldap_test_helper'
3
2
 
4
3
  class ConfigTest < MiniTest::Unit::TestCase
5
4
  include LdapTestHelper
@@ -1,4 +1,4 @@
1
- require 'minitest/autorun'
1
+ require_relative './lib/ldap_test_helper'
2
2
 
3
3
  class TestIPAMemberService < MiniTest::Unit::TestCase
4
4
  include LdapTestHelper
@@ -13,6 +13,10 @@ class TestIPAMemberService < MiniTest::Unit::TestCase
13
13
  @ldap.expect(:search, ipa_user_payload, [:filter => ipa_name_filter("john")])
14
14
  end
15
15
 
16
+ def basic_group
17
+ @ldap.expect(:search, ipa_group_payload, [:filter => ipa_group_filter("broze"), :base => @config.group_base])
18
+ end
19
+
16
20
  def test_find_user
17
21
  basic_user
18
22
  @ipams.ldap = @ldap
@@ -33,4 +37,28 @@ class TestIPAMemberService < MiniTest::Unit::TestCase
33
37
  assert_equal [], @ipams.find_user_groups('john')
34
38
  @ldap.verify
35
39
  end
40
+
41
+ def test_find_good_user
42
+ basic_user
43
+ @ipams.ldap = @ldap
44
+ assert_equal ipa_user_payload, @ipams.find_user('john')
45
+ end
46
+
47
+ def test_find_missing_user
48
+ @ldap.expect(:search, nil, [:filter => ipa_name_filter("john")])
49
+ @ipams.ldap = @ldap
50
+ assert_raises(LdapFluff::FreeIPA::MemberService::UIDNotFoundException) { @ipams.find_user('john') }
51
+ end
52
+
53
+ def test_find_good_group
54
+ basic_group
55
+ @ipams.ldap = @ldap
56
+ assert_equal ipa_group_payload, @ipams.find_group('broze')
57
+ end
58
+
59
+ def test_find_missing_group
60
+ @ldap.expect(:search, nil, [:filter => ipa_group_filter("broze"), :base => @config.group_base])
61
+ @ipams.ldap = @ldap
62
+ assert_raises(LdapFluff::FreeIPA::MemberService::GIDNotFoundException) { @ipams.find_group('broze') }
63
+ end
36
64
  end
data/test/ipa_test.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'minitest/autorun'
1
+ require_relative './lib/ldap_test_helper'
2
2
 
3
3
  class TestIPA < MiniTest::Unit::TestCase
4
4
  include LdapTestHelper
@@ -97,5 +97,43 @@ class TestIPA < MiniTest::Unit::TestCase
97
97
  bigtime_user
98
98
  assert_equal @ipa.is_in_groups('john',["broskies"],true), true
99
99
  end
100
+
101
+ def test_user_exists
102
+ @md = MiniTest::Mock.new
103
+ @md.expect(:find_user, 'notnilluser', ["john"])
104
+ @ipa.member_service = @md
105
+ service_bind
106
+ assert @ipa.user_exists?('john')
107
+ end
108
+
109
+ def test_missing_user
110
+ @md = MiniTest::Mock.new
111
+ @md.expect(:find_user, nil, ['john'])
112
+ def @md.find_user uid
113
+ raise LdapFluff::FreeIPA::MemberService::UIDNotFoundException
114
+ end
115
+ @ipa.member_service = @md
116
+ service_bind
117
+ assert !@ipa.user_exists?('john')
118
+ end
119
+
120
+ def test_group_exists
121
+ @md = MiniTest::Mock.new
122
+ @md.expect(:find_group, 'notnillgroup', ["broskies"])
123
+ @ipa.member_service = @md
124
+ service_bind
125
+ assert @ipa.group_exists?('broskies')
126
+ end
127
+
128
+ def test_missing_group
129
+ @md = MiniTest::Mock.new
130
+ @md.expect(:find_group, nil, ['broskies'])
131
+ def @md.find_group uid
132
+ raise LdapFluff::FreeIPA::MemberService::GIDNotFoundException
133
+ end
134
+ @ipa.member_service = @md
135
+ service_bind
136
+ assert !@ipa.group_exists?('broskies')
137
+ end
100
138
  end
101
139
 
data/test/ldap_test.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'minitest/autorun'
1
+ require_relative './lib/ldap_test_helper'
2
2
 
3
3
  class TestLDAP < MiniTest::Unit::TestCase
4
4
  include LdapTestHelper
@@ -29,6 +29,34 @@ class TestLDAP < MiniTest::Unit::TestCase
29
29
  assert_equal @fluff.is_in_groups?('john',['broskies','girlfriends']), false
30
30
  @ldap.verify
31
31
  end
32
+
33
+ def test_valid_user
34
+ @ldap.expect(:user_exists?, true, ['john'])
35
+ @fluff.ldap = @ldap
36
+ assert @fluff.valid_user? 'john'
37
+ @ldap.verify
38
+ end
39
+
40
+ def test_valid_group
41
+ @ldap.expect(:group_exists?, true, ['broskies'])
42
+ @fluff.ldap = @ldap
43
+ assert @fluff.valid_group? 'broskies'
44
+ @ldap.verify
45
+ end
46
+
47
+ def test_invalid_group
48
+ @ldap.expect(:group_exists?, false, ['broskerinos'])
49
+ @fluff.ldap = @ldap
50
+ assert !@fluff.valid_group?('broskerinos')
51
+ @ldap.verify
52
+ end
53
+
54
+ def test_invalid_user
55
+ @ldap.expect(:user_exists?, false, ['johnny rotten'])
56
+ @fluff.ldap = @ldap
57
+ assert !@fluff.valid_user?('johnny rotten')
58
+ @ldap.verify
59
+ end
32
60
  end
33
61
 
34
62
 
@@ -1,5 +1,7 @@
1
- require 'net/ldap'
1
+ require_relative '../../lib/ldap_fluff'
2
2
  require 'ostruct'
3
+ require 'net/ldap'
4
+ require 'minitest/autorun'
3
5
 
4
6
  module LdapTestHelper
5
7
  attr_accessor :group_base, :class_filter, :user
@@ -21,10 +23,18 @@ module LdapTestHelper
21
23
  Net::LDAP::Filter.eq("samaccountname",name)
22
24
  end
23
25
 
26
+ def ad_group_filter(name)
27
+ Net::LDAP::Filter.eq("cn",name)
28
+ end
29
+
24
30
  def ipa_name_filter(name)
25
31
  Net::LDAP::Filter.eq("uid",name)
26
32
  end
27
33
 
34
+ def ipa_group_filter(name)
35
+ Net::LDAP::Filter.eq("cn",name)
36
+ end
37
+
28
38
  def group_filter(g)
29
39
  Net::LDAP::Filter.eq("cn", g)
30
40
  end
@@ -41,6 +51,10 @@ module LdapTestHelper
41
51
  [{ :memberof => ["CN=group,dc=internet,dc=com"] }]
42
52
  end
43
53
 
54
+ def ad_group_payload
55
+ [{:cn => "broze", :memberof => ["CN=group,dc=internet,dc=com"] }]
56
+ end
57
+
44
58
  def ad_parent_payload(num)
45
59
  [{ :memberof => ["CN=bros#{num},dc=internet,dc=com"] }]
46
60
  end
@@ -53,7 +67,15 @@ module LdapTestHelper
53
67
  [{:cn => ["bros"]}]
54
68
  end
55
69
 
70
+ def posix_group_payload
71
+ [{:cn => ["broze"]}]
72
+ end
73
+
56
74
  def ipa_user_payload
57
- [{:cn => 'user'},{:memberof => ['cn=group,dc=internet,dc=com','cn=bros,dc=internet,dc=com']}]
75
+ [{:cn => 'john'},{:memberof => ['cn=group,dc=internet,dc=com','cn=bros,dc=internet,dc=com']}]
76
+ end
77
+
78
+ def ipa_group_payload
79
+ [{:cn => 'group'},{:memberof => ['cn=group,dc=internet,dc=com','cn=bros,dc=internet,dc=com']}]
58
80
  end
59
81
  end
@@ -1,4 +1,4 @@
1
- require 'minitest/autorun'
1
+ require_relative './lib/ldap_test_helper'
2
2
 
3
3
  class TestPosixMemberService < MiniTest::Unit::TestCase
4
4
  include LdapTestHelper
@@ -22,4 +22,58 @@ class TestPosixMemberService < MiniTest::Unit::TestCase
22
22
  assert_equal ['bros'], @ms.find_user_groups('john')
23
23
  @ldap.verify
24
24
  end
25
+
26
+ def test_user_exists
27
+ user = posix_user_payload
28
+ @ldap.expect(:search,
29
+ user,
30
+ [
31
+ :filter => @ms.name_filter('john'),
32
+ :base =>config.group_base
33
+ ]
34
+ )
35
+ @ms.ldap = @ldap
36
+ assert @ms.find_user('john')
37
+ @ldap.verify
38
+ end
39
+
40
+ def test_user_doesnt_exists
41
+ @ldap.expect(:search,
42
+ nil,
43
+ [
44
+ :filter => @ms.name_filter('john'),
45
+ :base =>config.group_base
46
+ ]
47
+ )
48
+ @ms.ldap = @ldap
49
+ assert_raises(LdapFluff::Posix::MemberService::UIDNotFoundException) { @ms.find_user('john') }
50
+ @ldap.verify
51
+ end
52
+
53
+ def test_group_exists
54
+ group = posix_group_payload
55
+ @ldap.expect(:search,
56
+ group,
57
+ [
58
+ :filter => @ms.group_filter('broze'),
59
+ :base =>config.group_base
60
+ ]
61
+ )
62
+ @ms.ldap = @ldap
63
+ assert @ms.find_group('broze')
64
+ @ldap.verify
65
+ end
66
+
67
+ def test_group_doesnt_exists
68
+ @ldap.expect(:search,
69
+ nil,
70
+ [
71
+ :filter => @ms.group_filter('broze'),
72
+ :base =>config.group_base
73
+ ]
74
+ )
75
+ @ms.ldap = @ldap
76
+ assert_raises(LdapFluff::Posix::MemberService::GIDNotFoundException) { @ms.find_group('broze') }
77
+ @ldap.verify
78
+ end
25
79
  end
data/test/posix_test.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'minitest/autorun'
1
+ require_relative './lib/ldap_test_helper'
2
2
 
3
3
  class TestPosix < MiniTest::Unit::TestCase
4
4
  include LdapTestHelper
@@ -61,4 +61,38 @@ class TestPosix < MiniTest::Unit::TestCase
61
61
  @posix.ldap = @ldap
62
62
  assert_equal @posix.bind?("internet", "password"), false
63
63
  end
64
+
65
+ def test_user_exists
66
+ @md = MiniTest::Mock.new
67
+ @md.expect(:find_user, 'notnilluser', ["john"])
68
+ @posix.member_service = @md
69
+ assert @posix.user_exists?('john')
70
+ end
71
+
72
+ def test_missing_user
73
+ @md = MiniTest::Mock.new
74
+ @md.expect(:find_user, nil, ['john'])
75
+ def @md.find_user uid
76
+ raise LdapFluff::Posix::MemberService::UIDNotFoundException
77
+ end
78
+ @posix.member_service = @md
79
+ assert !@posix.user_exists?('john')
80
+ end
81
+
82
+ def test_group_exists
83
+ @md = MiniTest::Mock.new
84
+ @md.expect(:find_group, 'notnillgroup', ["broskies"])
85
+ @posix.member_service = @md
86
+ assert @posix.group_exists?('broskies')
87
+ end
88
+
89
+ def test_missing_group
90
+ @md = MiniTest::Mock.new
91
+ @md.expect(:find_group, nil, ['broskies'])
92
+ def @md.find_group uid
93
+ raise LdapFluff::Posix::MemberService::GIDNotFoundException
94
+ end
95
+ @posix.member_service = @md
96
+ assert !@posix.group_exists?('broskies')
97
+ end
64
98
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ldap_fluff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-02 00:00:00.000000000 Z
12
+ date: 2013-04-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: net-ldap