ldap_fluff 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8c3b572c980fa3c48ede92f936858eb045cf54f6b507e6c7767de0751f85d9cc
4
- data.tar.gz: 9280821c5a7ecc20c2300421d9a5947820de407da3480143b08c6ec146675dcb
3
+ metadata.gz: 80bbd37fc8123c1481d81117015acae3ba22aaaf95c6d87ef064c124c7f8f6f0
4
+ data.tar.gz: '0899615a301cc6569a3e036b136f27c73a68accf270aa4842b2bf17164bcf2ac'
5
5
  SHA512:
6
- metadata.gz: 4d74d42c9156af61cc485d6e8c1a99d1945aa97157659e627323f60e5b09807ea2c860fd10c62e9ce209d393200a5b57ef20205e8fc66eecf7762af7be56ee22
7
- data.tar.gz: 1228b0a8730546ec3e38658bb3a86166bc10cb2af607a8d6e3ee77e3dd8c9ee465c0bbd2383ff1d8f5cdeed3053fd6a649dbdc8b145ccb29e47321ec7ef3e973
6
+ metadata.gz: c288887b87abb0136d093d61924ddb646234135509cd95bccb4a29c2df149a19855e81eec321cfa3b69a34aeb95934e60c158d088b8a348e7c67d4fb10909334
7
+ data.tar.gz: 3ba66326d622afcfa64a15adc8ff87398726d38d775ed46c35ebe5e3b4026c3d01731ffcb8768af01ea5cf5ada903a8c5d246816b99fcfc4e7545a29f409fc79
@@ -26,7 +26,7 @@ class LdapFluff::ActiveDirectory::MemberService < LdapFluff::GenericMemberServic
26
26
 
27
27
  # return the domain functionality level, default to 0
28
28
  def _get_domain_func_level
29
- return @domain_functionality unless @domain_functionality.nil?
29
+ return @domain_functionality if defined?(@domain_functionality)
30
30
 
31
31
  @domain_functionality = 0
32
32
 
@@ -57,7 +57,7 @@ class LdapFluff::ActiveDirectory::MemberService < LdapFluff::GenericMemberServic
57
57
  next unless !search.nil? && !search.first.nil?
58
58
  groups = search.first[:memberof] - known_groups
59
59
  known_groups += groups
60
- next_level, new_known_groups = _walk_group_ancestry(groups, known_groups)
60
+ next_level, _new_known_groups = _walk_group_ancestry(groups, known_groups)
61
61
  set += next_level
62
62
  set += groups
63
63
  known_groups += next_level
@@ -65,8 +65,8 @@ class LdapFluff::Config
65
65
  end
66
66
 
67
67
  def correct_server_type?(config)
68
- unless %i[posix active_directory free_ipa].include?(config['server_type'])
69
- raise ConfigError, 'config key server_type has to be :active_directory, :posix, :free_ipa ' +
68
+ unless %i[posix active_directory free_ipa netiq].include?(config['server_type'])
69
+ raise ConfigError, 'config key server_type has to be :active_directory, :posix, :free_ipa, :netiq ' +
70
70
  "but was #{config['server_type']}"
71
71
  end
72
72
  end
@@ -13,6 +13,8 @@ class LdapFluff
13
13
  @ldap = ActiveDirectory.new(config)
14
14
  when :free_ipa
15
15
  @ldap = FreeIPA.new(config)
16
+ when :netiq
17
+ @ldap = NetIQ.new(config)
16
18
  else
17
19
  raise 'unknown server_type'
18
20
  end
@@ -0,0 +1,6 @@
1
+ class LdapFluff::NetIQ < LdapFluff::Posix
2
+ def create_member_service(config)
3
+ service_bind
4
+ super(config)
5
+ end
6
+ end
@@ -0,0 +1,43 @@
1
+ require 'net/ldap'
2
+
3
+ # handles the naughty bits of posix ldap
4
+ class LdapFluff::NetIQ::MemberService < LdapFluff::Posix::MemberService
5
+ def initialize(ldap, config)
6
+ super
7
+ # set default after super, because Posix' initialize would overwrite it otherwise
8
+ @attr_login = (config.attr_login || 'uid')
9
+ end
10
+
11
+ def find_by_dn(search_dn)
12
+ entry, base = search_dn.split(/(?<!\\),/, 2)
13
+ _entry_attr, entry_value = entry.split('=', 2)
14
+ entry_value = entry_value.gsub('\,', ',')
15
+ user = @ldap.search(:filter => name_filter(entry_value, 'workforceid'), :base => base)
16
+ raise self.class::UIDNotFoundException if (user.nil? || user.empty?)
17
+ user
18
+ end
19
+
20
+ def get_logins(userlist)
21
+ userlist.map do |current_user|
22
+ find_by_dn(current_user&.downcase)[0][@attr_login][0]
23
+ end
24
+ end
25
+
26
+ # return an ldap user with groups attached
27
+ # note : this method is not particularly fast for large ldap systems
28
+ def find_user_groups(uid)
29
+ filter = Net::LDAP::Filter.eq('memberuid', uid)
30
+ begin
31
+ user = find_user(uid)[0][:dn][0]
32
+ filter |= Net::LDAP::Filter.eq('member', user)
33
+ rescue UIDNotFoundException
34
+ # do nothing
35
+ end
36
+
37
+ @ldap.search(
38
+ :filter => filter,
39
+ :base => @group_base,
40
+ :attributes => ['cn']
41
+ ).map { |entry| entry[:cn][0] }
42
+ end
43
+ end
@@ -17,33 +17,15 @@ class LdapFluff::Posix::MemberService < LdapFluff::GenericMemberService
17
17
  # note : this method is not particularly fast for large ldap systems
18
18
  def find_user_groups(uid)
19
19
  groups = []
20
- @ldap.search(:filter => Net::LDAP::Filter.eq('memberuid', uid), :base => @group_base).each do |entry|
20
+ @ldap.search(
21
+ :filter => Net::LDAP::Filter.eq('memberuid', uid),
22
+ :base => @group_base, :attributes => ["cn"]
23
+ ).each do |entry|
21
24
  groups << entry[:cn][0]
22
25
  end
23
26
  groups
24
27
  end
25
28
 
26
- def times_in_groups(uid, gids, all)
27
- filters = []
28
- gids.each do |cn|
29
- filters << group_filter(cn)
30
- end
31
- group_filters = merge_filters(filters, all)
32
- filter = name_filter(uid) & group_filters
33
- @ldap.search(:base => @group_base, :filter => filter).size
34
- end
35
-
36
- # AND or OR all of the filters together
37
- def merge_filters(filters = [], all = false)
38
- if !filters.nil? && filters.size >= 1
39
- filter = filters[0]
40
- filters[1..(filters.size - 1)].each do |gfilter|
41
- filter = (all ? filter & gfilter : filter | gfilter)
42
- end
43
- filter
44
- end
45
- end
46
-
47
29
  class UIDNotFoundException < LdapFluff::Error
48
30
  end
49
31
 
data/lib/ldap_fluff.rb CHANGED
@@ -11,3 +11,5 @@ require 'ldap_fluff/posix_netgroup_member_service'
11
11
  require 'ldap_fluff/freeipa'
12
12
  require 'ldap_fluff/freeipa_member_service'
13
13
  require 'ldap_fluff/freeipa_netgroup_member_service'
14
+ require 'ldap_fluff/netiq'
15
+ require 'ldap_fluff/netiq_member_service'
@@ -1,6 +1,6 @@
1
1
  require 'lib/ldap_test_helper'
2
2
 
3
- class TestADMemberService < MiniTest::Test
3
+ class TestADMemberService < Minitest::Test
4
4
  include LdapTestHelper
5
5
 
6
6
  def setup
data/test/ad_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'lib/ldap_test_helper'
2
2
 
3
- class TestAD < MiniTest::Test
3
+ class TestAD < Minitest::Test
4
4
  include LdapTestHelper
5
5
 
6
6
  def setup
@@ -34,8 +34,8 @@ class TestAD < MiniTest::Test
34
34
 
35
35
  def test_good_bind_with_account_name
36
36
  # looks up the account name's full DN via the service account
37
- @md = MiniTest::Mock.new
38
- user_result = MiniTest::Mock.new
37
+ @md = Minitest::Mock.new
38
+ user_result = Minitest::Mock.new
39
39
  user_result.expect(:dn, ad_user_dn('Internet User'))
40
40
  @md.expect(:find_user, [user_result], %w[internet])
41
41
  @ad.member_service = @md
@@ -62,7 +62,7 @@ class TestAD < MiniTest::Test
62
62
 
63
63
  def test_bad_user
64
64
  service_bind
65
- md = MiniTest::Mock.new
65
+ md = Minitest::Mock.new
66
66
  md.expect(:find_user_groups, nil, %w[john])
67
67
  def md.find_user_groups(*_args)
68
68
  raise LdapFluff::ActiveDirectory::MemberService::UIDNotFoundException
@@ -112,7 +112,7 @@ class TestAD < MiniTest::Test
112
112
 
113
113
  def test_subgroups_in_groups_are_ignored
114
114
  group = Net::LDAP::Entry.new('foremaners')
115
- md = MiniTest::Mock.new
115
+ md = Minitest::Mock.new
116
116
  2.times { md.expect(:find_group, [group], ['foremaners']) }
117
117
  2.times { service_bind }
118
118
  def md.find_by_dn(_dn)
@@ -124,7 +124,7 @@ class TestAD < MiniTest::Test
124
124
  end
125
125
 
126
126
  def test_user_exists
127
- md = MiniTest::Mock.new
127
+ md = Minitest::Mock.new
128
128
  md.expect(:find_user, 'notnilluser', %w[john])
129
129
  @ad.member_service = md
130
130
  service_bind
@@ -132,7 +132,7 @@ class TestAD < MiniTest::Test
132
132
  end
133
133
 
134
134
  def test_missing_user
135
- md = MiniTest::Mock.new
135
+ md = Minitest::Mock.new
136
136
  md.expect(:find_user, nil, %w[john])
137
137
  def md.find_user(_uid)
138
138
  raise LdapFluff::ActiveDirectory::MemberService::UIDNotFoundException
@@ -143,7 +143,7 @@ class TestAD < MiniTest::Test
143
143
  end
144
144
 
145
145
  def test_group_exists
146
- md = MiniTest::Mock.new
146
+ md = Minitest::Mock.new
147
147
  md.expect(:find_group, 'notnillgroup', %w[broskies])
148
148
  @ad.member_service = md
149
149
  service_bind
@@ -151,7 +151,7 @@ class TestAD < MiniTest::Test
151
151
  end
152
152
 
153
153
  def test_missing_group
154
- md = MiniTest::Mock.new
154
+ md = Minitest::Mock.new
155
155
  md.expect(:find_group, nil, %w[broskies])
156
156
  def md.find_group(_uid)
157
157
  raise LdapFluff::ActiveDirectory::MemberService::GIDNotFoundException
@@ -172,7 +172,7 @@ class TestAD < MiniTest::Test
172
172
  nested_group[:objectclass] = ['organizationalunit']
173
173
  nested_user[:objectclass] = ['person']
174
174
 
175
- md = MiniTest::Mock.new
175
+ md = Minitest::Mock.new
176
176
  2.times { md.expect(:find_group, [group], ['foremaners']) }
177
177
  2.times { md.expect(:find_group, [nested_group], ['katellers']) }
178
178
  2.times { service_bind }
@@ -196,7 +196,7 @@ class TestAD < MiniTest::Test
196
196
  nested_group[:memberof] = ['CN=foremaners,DC=corp,DC=windows,DC=com']
197
197
  nested_user[:objectclass] = ['person']
198
198
 
199
- md = MiniTest::Mock.new
199
+ md = Minitest::Mock.new
200
200
  2.times { md.expect(:find_group, [group], ['foremaners']) }
201
201
  2.times { md.expect(:find_group, [nested_group], ['katellers']) }
202
202
  2.times { service_bind }
data/test/config_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'lib/ldap_test_helper'
2
2
 
3
- class ConfigTest < MiniTest::Test
3
+ class ConfigTest < Minitest::Test
4
4
  include LdapTestHelper
5
5
 
6
6
  def test_unsupported_type
@@ -1,6 +1,6 @@
1
1
  require 'lib/ldap_test_helper'
2
2
 
3
- class TestIPAMemberService < MiniTest::Test
3
+ class TestIPAMemberService < Minitest::Test
4
4
  include LdapTestHelper
5
5
 
6
6
  def setup
@@ -1,6 +1,6 @@
1
1
  require 'lib/ldap_test_helper'
2
2
 
3
- class TestIPANetgroupMemberService < MiniTest::Test
3
+ class TestIPANetgroupMemberService < Minitest::Test
4
4
  include LdapTestHelper
5
5
 
6
6
  def setup
data/test/ipa_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'lib/ldap_test_helper'
2
2
 
3
- class TestIPA < MiniTest::Test
3
+ class TestIPA < Minitest::Test
4
4
  include LdapTestHelper
5
5
 
6
6
  def setup
@@ -16,8 +16,8 @@ class TestIPA < MiniTest::Test
16
16
 
17
17
  def test_good_bind
18
18
  # looks up the uid's full DN via the service account
19
- @md = MiniTest::Mock.new
20
- user_result = MiniTest::Mock.new
19
+ @md = Minitest::Mock.new
20
+ user_result = Minitest::Mock.new
21
21
  user_result.expect(:dn, ipa_user_bind('internet'))
22
22
  @md.expect(:find_user, [user_result], %w[internet])
23
23
  @ipa.member_service = @md
@@ -53,7 +53,7 @@ class TestIPA < MiniTest::Test
53
53
 
54
54
  def test_bad_user
55
55
  service_bind
56
- @md = MiniTest::Mock.new
56
+ @md = Minitest::Mock.new
57
57
  @md.expect(:find_user_groups, nil, %w[john])
58
58
  def @md.find_user_groups(*_args)
59
59
  raise LdapFluff::FreeIPA::MemberService::UIDNotFoundException
@@ -108,7 +108,7 @@ class TestIPA < MiniTest::Test
108
108
  end
109
109
 
110
110
  def test_user_exists
111
- @md = MiniTest::Mock.new
111
+ @md = Minitest::Mock.new
112
112
  @md.expect(:find_user, 'notnilluser', %w[john])
113
113
  @ipa.member_service = @md
114
114
  service_bind
@@ -116,7 +116,7 @@ class TestIPA < MiniTest::Test
116
116
  end
117
117
 
118
118
  def test_missing_user
119
- @md = MiniTest::Mock.new
119
+ @md = Minitest::Mock.new
120
120
  @md.expect(:find_user, nil, %w[john])
121
121
  def @md.find_user(_uid)
122
122
  raise LdapFluff::FreeIPA::MemberService::UIDNotFoundException
@@ -127,7 +127,7 @@ class TestIPA < MiniTest::Test
127
127
  end
128
128
 
129
129
  def test_group_exists
130
- @md = MiniTest::Mock.new
130
+ @md = Minitest::Mock.new
131
131
  @md.expect(:find_group, 'notnillgroup', %w[broskies])
132
132
  @ipa.member_service = @md
133
133
  service_bind
@@ -135,7 +135,7 @@ class TestIPA < MiniTest::Test
135
135
  end
136
136
 
137
137
  def test_missing_group
138
- @md = MiniTest::Mock.new
138
+ @md = Minitest::Mock.new
139
139
  @md.expect(:find_group, nil, %w[broskies])
140
140
  def @md.find_group(_uid)
141
141
  raise LdapFluff::FreeIPA::MemberService::GIDNotFoundException
@@ -151,7 +151,7 @@ class TestIPA < MiniTest::Test
151
151
  nested_group = Net::LDAP::Entry.new('gid=katellers,cn=Groups,cn=accounts,dc=localdomain')
152
152
  nested_group[:member] = ['uid=testuser,cn=users,cn=accounts,dc=localdomain']
153
153
 
154
- md = MiniTest::Mock.new
154
+ md = Minitest::Mock.new
155
155
  2.times { md.expect(:find_group, [group], ['foremaners']) }
156
156
  2.times { md.expect(:find_group, [nested_group], ['katellers']) }
157
157
  2.times { service_bind }
data/test/ldap_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'lib/ldap_test_helper'
2
2
 
3
- class TestLDAP < MiniTest::Test
3
+ class TestLDAP < Minitest::Test
4
4
  include LdapTestHelper
5
5
 
6
6
  def setup
@@ -21,7 +21,7 @@ module LdapTestHelper
21
21
 
22
22
  def setup
23
23
  config
24
- @ldap = MiniTest::Mock.new
24
+ @ldap = Minitest::Mock.new
25
25
  end
26
26
 
27
27
  def config
@@ -38,13 +38,13 @@ module LdapTestHelper
38
38
  end
39
39
 
40
40
  def basic_user
41
- @md = MiniTest::Mock.new
41
+ @md = Minitest::Mock.new
42
42
  @md.expect(:find_user_groups, %w[bros], %w[john])
43
43
  get_test_instance_variable.member_service = @md
44
44
  end
45
45
 
46
46
  def bigtime_user
47
- @md = MiniTest::Mock.new
47
+ @md = Minitest::Mock.new
48
48
  @md.expect(:find_user_groups, %w[bros broskies], %w[john])
49
49
  get_test_instance_variable.member_service = @md
50
50
  end
@@ -105,6 +105,21 @@ module LdapTestHelper
105
105
  [{ :memberof => [ad_group_dn("bros#{num}"), ad_group_dn("broskies#{num}")] }]
106
106
  end
107
107
 
108
+ def netiq_user_payload
109
+ [{ :uid => ["john"],
110
+ # necessary, because Net::LDAP::Entry would allow both
111
+ 'uid' => ["john"],
112
+ :dn => ["cn=42,ou=usr,o=employee"],
113
+ :workeforceid => ["42"] }]
114
+ end
115
+
116
+ def netiq_group_payload
117
+ [{ :cn => ["broze"],
118
+ :dn => ["cn=broze,ou=mygroup,ou=apps,o=global"],
119
+ :member => ["cn=42,ou=usr,o=employee"],
120
+ :workforceid => ["21"] }]
121
+ end
122
+
108
123
  def posix_user_payload
109
124
  [{ :cn => ["john"] }]
110
125
  end
@@ -0,0 +1,81 @@
1
+ require 'lib/ldap_test_helper'
2
+
3
+ class TestNetIQMemberService < Minitest::Test
4
+ include LdapTestHelper
5
+
6
+ def setup
7
+ super
8
+ @ms = LdapFluff::NetIQ::MemberService.new(@ldap, @config)
9
+ end
10
+
11
+ def test_find_user
12
+ user = netiq_user_payload
13
+ @ldap.expect(:search, user, [:filter => @ms.name_filter('john'),
14
+ :base => config.base_dn])
15
+ @ms.ldap = @ldap
16
+ assert_equal netiq_user_payload, @ms.find_user('john')
17
+ @ldap.verify
18
+ end
19
+
20
+ def test_find_user_groups
21
+ user = netiq_group_payload
22
+ @ldap.expect(:search, netiq_user_payload, [:filter => @ms.name_filter('john'), :base => config.base_dn])
23
+ @ldap.expect(:search, user, [:filter => Net::LDAP::Filter.eq('memberuid', 'john') |
24
+ Net::LDAP::Filter.eq('member', 'cn=42,ou=usr,o=employee'),
25
+ :base => config.group_base, :attributes => ['cn']])
26
+ @ms.ldap = @ldap
27
+ assert_equal ['broze'], @ms.find_user_groups('john')
28
+ @ldap.verify
29
+ end
30
+
31
+ def test_find_no_groups
32
+ @ldap.expect(:search, [], [:filter => @ms.name_filter('john'), :base => config.base_dn])
33
+ @ldap.expect(:search, [], [:filter => Net::LDAP::Filter.eq('memberuid', 'john'),
34
+ :base => config.group_base, :attributes => ['cn']])
35
+ @ms.ldap = @ldap
36
+ assert_equal [], @ms.find_user_groups('john')
37
+ @ldap.verify
38
+ end
39
+
40
+ def test_user_exists
41
+ user = netiq_user_payload
42
+ @ldap.expect(:search, user, [:filter => @ms.name_filter('john'),
43
+ :base => config.base_dn])
44
+ @ms.ldap = @ldap
45
+ assert @ms.find_user('john')
46
+ @ldap.verify
47
+ end
48
+
49
+ def test_user_doesnt_exists
50
+ @ldap.expect(:search, nil, [:filter => @ms.name_filter('john'),
51
+ :base => config.base_dn])
52
+ @ms.ldap = @ldap
53
+ assert_raises(LdapFluff::NetIQ::MemberService::UIDNotFoundException) { @ms.find_user('john') }
54
+ @ldap.verify
55
+ end
56
+
57
+ def test_group_exists
58
+ group = netiq_group_payload
59
+ @ldap.expect(:search, group, [:filter => @ms.group_filter('broze'),
60
+ :base => config.group_base])
61
+ @ms.ldap = @ldap
62
+ assert @ms.find_group('broze')
63
+ @ldap.verify
64
+ end
65
+
66
+ def test_group_doesnt_exists
67
+ @ldap.expect(:search, nil, [:filter => @ms.group_filter('broze'),
68
+ :base => config.group_base])
69
+ @ms.ldap = @ldap
70
+ assert_raises(LdapFluff::NetIQ::MemberService::GIDNotFoundException) { @ms.find_group('broze') }
71
+ @ldap.verify
72
+ end
73
+
74
+ def test_get_logins
75
+ @ldap.expect(:search, netiq_user_payload,
76
+ [:filter => @ms.name_filter('42', "workforceid"),
77
+ :base => 'ou=usr,o=employee'])
78
+
79
+ assert_equal ['john'], @ms.get_logins(['cn=42,ou=usr,o=employee'])
80
+ end
81
+ end
@@ -0,0 +1,145 @@
1
+ require 'lib/ldap_test_helper'
2
+
3
+ class TestNetIQ < Minitest::Test
4
+ include LdapTestHelper
5
+
6
+ def setup
7
+ super
8
+ @ldap.expect(:bind, true)
9
+ @ldap.expect(:auth, nil, %w[service pass])
10
+ Net::LDAP.stub :new, @ldap do
11
+ @netiq = LdapFluff::NetIQ.new(@config)
12
+ end
13
+ end
14
+
15
+ def service_bind
16
+ @ldap.expect(:auth, nil, %w[service pass])
17
+ super
18
+ end
19
+
20
+ def test_groups
21
+ service_bind
22
+ basic_user
23
+ assert_equal(@netiq.groups_for_uid("john"), %w[bros])
24
+ end
25
+
26
+ def test_missing_user
27
+ md = Minitest::Mock.new
28
+ md.expect(:find_user_groups, [], %w[john])
29
+ @netiq.member_service = md
30
+ @ldap.expect(:bind, true)
31
+ @ldap.expect(:auth, nil, %w[service pass])
32
+ assert_equal([], @netiq.groups_for_uid('john'))
33
+ end
34
+
35
+ def test_isnt_in_groups
36
+ service_bind
37
+ basic_user
38
+ assert_equal(@netiq.is_in_groups('john', %w[broskies], true), false)
39
+ end
40
+
41
+ def test_is_in_groups
42
+ service_bind
43
+ basic_user
44
+ assert_equal(@netiq.is_in_groups('john', %w[bros], true), true)
45
+ end
46
+
47
+ def test_is_in_no_groups
48
+ service_bind
49
+ basic_user
50
+ assert_equal(@netiq.is_in_groups('john', [], true), true)
51
+ end
52
+
53
+ def test_good_bind
54
+ # looks up the uid's full DN via the service account
55
+ @md = Minitest::Mock.new
56
+ user_result = Minitest::Mock.new
57
+ user_result.expect(:dn, 'uid=internet,dn=example')
58
+ @md.expect(:find_user, [user_result], %w[internet])
59
+ @netiq.member_service = @md
60
+ service_bind
61
+ @ldap.expect(:auth, nil, %w[uid=internet,dn=example password])
62
+ @ldap.expect(:bind, true)
63
+ @netiq.ldap = @ldap
64
+ assert_equal(@netiq.bind?("internet", "password"), true)
65
+ end
66
+
67
+ def test_good_bind_with_dn
68
+ # no expectation on the service account
69
+ @ldap.expect(:auth, nil, %w[uid=internet,dn=example password])
70
+ @ldap.expect(:bind, true)
71
+ @netiq.ldap = @ldap
72
+ assert_equal(@netiq.bind?("uid=internet,dn=example", "password"), true)
73
+ end
74
+
75
+ def test_bad_bind
76
+ @ldap.expect(:auth, nil, %w[uid=internet,dn=example password])
77
+ @ldap.expect(:bind, false)
78
+ @netiq.ldap = @ldap
79
+ assert_equal(@netiq.bind?("uid=internet,dn=example", "password"), false)
80
+ end
81
+
82
+ def test_user_exists
83
+ service_bind
84
+ md = Minitest::Mock.new
85
+ md.expect(:find_user, 'notnilluser', %w[john])
86
+ @netiq.member_service = md
87
+ assert(@netiq.user_exists?('john'))
88
+ end
89
+
90
+ def test_user_not_exists
91
+ service_bind
92
+ md = Minitest::Mock.new
93
+ md.expect(:find_user, nil, %w[john])
94
+ def md.find_user(_uid)
95
+ raise LdapFluff::NetIQ::MemberService::UIDNotFoundException
96
+ end
97
+ @netiq.member_service = md
98
+ refute(@netiq.user_exists?('john'))
99
+ end
100
+
101
+ def test_group_exists
102
+ service_bind
103
+ md = Minitest::Mock.new
104
+ md.expect(:find_group, 'notnillgroup', %w[broskies])
105
+ @netiq.member_service = md
106
+ assert(@netiq.group_exists?('broskies'))
107
+ end
108
+
109
+ def test_missing_group
110
+ service_bind
111
+ md = Minitest::Mock.new
112
+ md.expect(:find_group, nil, %w[broskies])
113
+ def md.find_group(_uid)
114
+ raise LdapFluff::NetIQ::MemberService::GIDNotFoundException
115
+ end
116
+ @netiq.member_service = md
117
+ refute(@netiq.group_exists?('broskies'))
118
+ end
119
+
120
+ def test_find_users_in_nested_groups
121
+ service_bind
122
+ group = Net::LDAP::Entry.new('CN=foremaners,DC=example,DC=com')
123
+ group[:memberuid] = ['katellers']
124
+ nested_group = Net::LDAP::Entry.new('CN=katellers,CN=foremaners,DC=example,DC=com')
125
+ nested_group[:memberuid] = ['testuser']
126
+
127
+ @ldap.expect(:search,
128
+ [nested_group],
129
+ [{ :base => group.dn,
130
+ :filter => Net::LDAP::Filter.eq('objectClass', 'posixGroup') |
131
+ Net::LDAP::Filter.eq('objectClass', 'organizationalunit') |
132
+ Net::LDAP::Filter.eq('objectClass', 'groupOfUniqueNames') |
133
+ Net::LDAP::Filter.eq('objectClass', 'groupOfNames') }])
134
+ @netiq.ldap = @ldap
135
+
136
+ md = Minitest::Mock.new
137
+ 2.times { md.expect(:find_group, [group], ['foremaners']) }
138
+ @netiq.member_service = md
139
+
140
+ assert_equal @netiq.users_for_gid('foremaners'), ['testuser']
141
+
142
+ md.verify
143
+ @ldap.verify
144
+ end
145
+ end
@@ -1,6 +1,6 @@
1
1
  require 'lib/ldap_test_helper'
2
2
 
3
- class TestPosixMemberService < MiniTest::Test
3
+ class TestPosixMemberService < Minitest::Test
4
4
  include LdapTestHelper
5
5
 
6
6
  def setup
@@ -20,7 +20,8 @@ class TestPosixMemberService < MiniTest::Test
20
20
  def test_find_user_groups
21
21
  user = posix_group_payload
22
22
  @ldap.expect(:search, user, [:filter => @ms.name_filter('john'),
23
- :base => config.group_base])
23
+ :base => config.group_base,
24
+ :attributes => ["cn"]])
24
25
  @ms.ldap = @ldap
25
26
  assert_equal ['broze'], @ms.find_user_groups('john')
26
27
  @ldap.verify
@@ -28,7 +29,8 @@ class TestPosixMemberService < MiniTest::Test
28
29
 
29
30
  def test_find_no_groups
30
31
  @ldap.expect(:search, [], [:filter => @ms.name_filter("john"),
31
- :base => config.group_base])
32
+ :base => config.group_base,
33
+ :attributes => ["cn"]])
32
34
  @ms.ldap = @ldap
33
35
  assert_equal [], @ms.find_user_groups('john')
34
36
  @ldap.verify
@@ -1,6 +1,6 @@
1
1
  require 'lib/ldap_test_helper'
2
2
 
3
- class TestPosixNetgroupMemberService < MiniTest::Test
3
+ class TestPosixNetgroupMemberService < Minitest::Test
4
4
  include LdapTestHelper
5
5
 
6
6
  def setup
data/test/posix_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'lib/ldap_test_helper'
2
2
 
3
- class TestPosix < MiniTest::Test
3
+ class TestPosix < Minitest::Test
4
4
  include LdapTestHelper
5
5
 
6
6
  def setup
@@ -19,8 +19,9 @@ class TestPosix < MiniTest::Test
19
19
  assert_equal(@posix.groups_for_uid("john"), %w[bros])
20
20
  end
21
21
 
22
- def test_missing_user
23
- md = MiniTest::Mock.new
22
+ def test_groups_missing_user
23
+ service_bind
24
+ md = Minitest::Mock.new
24
25
  md.expect(:find_user_groups, [], %w[john])
25
26
  @posix.member_service = md
26
27
  assert_equal([], @posix.groups_for_uid('john'))
@@ -46,8 +47,8 @@ class TestPosix < MiniTest::Test
46
47
 
47
48
  def test_good_bind
48
49
  # looks up the uid's full DN via the service account
49
- @md = MiniTest::Mock.new
50
- user_result = MiniTest::Mock.new
50
+ @md = Minitest::Mock.new
51
+ user_result = Minitest::Mock.new
51
52
  user_result.expect(:dn, 'uid=internet,dn=example')
52
53
  @md.expect(:find_user, [user_result], %w[internet])
53
54
  @posix.member_service = @md
@@ -75,7 +76,7 @@ class TestPosix < MiniTest::Test
75
76
 
76
77
  def test_user_exists
77
78
  service_bind
78
- md = MiniTest::Mock.new
79
+ md = Minitest::Mock.new
79
80
  md.expect(:find_user, 'notnilluser', %w[john])
80
81
  @posix.member_service = md
81
82
  assert(@posix.user_exists?('john'))
@@ -83,7 +84,7 @@ class TestPosix < MiniTest::Test
83
84
 
84
85
  def test_missing_user
85
86
  service_bind
86
- md = MiniTest::Mock.new
87
+ md = Minitest::Mock.new
87
88
  md.expect(:find_user, nil, %w[john])
88
89
  def md.find_user(_uid)
89
90
  raise LdapFluff::Posix::MemberService::UIDNotFoundException
@@ -94,7 +95,7 @@ class TestPosix < MiniTest::Test
94
95
 
95
96
  def test_group_exists
96
97
  service_bind
97
- md = MiniTest::Mock.new
98
+ md = Minitest::Mock.new
98
99
  md.expect(:find_group, 'notnillgroup', %w[broskies])
99
100
  @posix.member_service = md
100
101
  assert(@posix.group_exists?('broskies'))
@@ -102,7 +103,7 @@ class TestPosix < MiniTest::Test
102
103
 
103
104
  def test_missing_group
104
105
  service_bind
105
- md = MiniTest::Mock.new
106
+ md = Minitest::Mock.new
106
107
  md.expect(:find_group, nil, %w[broskies])
107
108
  def md.find_group(_uid)
108
109
  raise LdapFluff::Posix::MemberService::GIDNotFoundException
@@ -127,7 +128,7 @@ class TestPosix < MiniTest::Test
127
128
  Net::LDAP::Filter.eq('objectClass', 'groupOfNames')}])
128
129
  @posix.ldap = @ldap
129
130
 
130
- md = MiniTest::Mock.new
131
+ md = Minitest::Mock.new
131
132
  2.times { md.expect(:find_group, [group], ['foremaners']) }
132
133
  @posix.member_service = md
133
134
 
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.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan O'Mara
@@ -10,10 +10,10 @@ authors:
10
10
  - Adam Price
11
11
  - Marek Hulan
12
12
  - Dominic Cleal
13
- autorequire:
13
+ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2021-06-25 00:00:00.000000000 Z
16
+ date: 2024-05-07 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: activesupport
@@ -21,14 +21,20 @@ dependencies:
21
21
  requirements:
22
22
  - - ">="
23
23
  - !ruby/object:Gem::Version
24
- version: '0'
24
+ version: '5'
25
+ - - "<"
26
+ - !ruby/object:Gem::Version
27
+ version: '7'
25
28
  type: :runtime
26
29
  prerelease: false
27
30
  version_requirements: !ruby/object:Gem::Requirement
28
31
  requirements:
29
32
  - - ">="
30
33
  - !ruby/object:Gem::Version
31
- version: '0'
34
+ version: '5'
35
+ - - "<"
36
+ - !ruby/object:Gem::Version
37
+ version: '7'
32
38
  - !ruby/object:Gem::Dependency
33
39
  name: net-ldap
34
40
  requirement: !ruby/object:Gem::Requirement
@@ -36,6 +42,9 @@ dependencies:
36
42
  - - ">="
37
43
  - !ruby/object:Gem::Version
38
44
  version: '0.11'
45
+ - - "<"
46
+ - !ruby/object:Gem::Version
47
+ version: '1'
39
48
  type: :runtime
40
49
  prerelease: false
41
50
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,34 +52,37 @@ dependencies:
43
52
  - - ">="
44
53
  - !ruby/object:Gem::Version
45
54
  version: '0.11'
55
+ - - "<"
56
+ - !ruby/object:Gem::Version
57
+ version: '1'
46
58
  - !ruby/object:Gem::Dependency
47
59
  name: minitest
48
60
  requirement: !ruby/object:Gem::Requirement
49
61
  requirements:
50
- - - ">="
62
+ - - "~>"
51
63
  - !ruby/object:Gem::Version
52
- version: '0'
64
+ version: '5.0'
53
65
  type: :development
54
66
  prerelease: false
55
67
  version_requirements: !ruby/object:Gem::Requirement
56
68
  requirements:
57
- - - ">="
69
+ - - "~>"
58
70
  - !ruby/object:Gem::Version
59
- version: '0'
71
+ version: '5.0'
60
72
  - !ruby/object:Gem::Dependency
61
73
  name: rake
62
74
  requirement: !ruby/object:Gem::Requirement
63
75
  requirements:
64
- - - ">="
76
+ - - "~>"
65
77
  - !ruby/object:Gem::Version
66
- version: '0'
78
+ version: '13.1'
67
79
  type: :development
68
80
  prerelease: false
69
81
  version_requirements: !ruby/object:Gem::Requirement
70
82
  requirements:
71
- - - ">="
83
+ - - "~>"
72
84
  - !ruby/object:Gem::Version
73
- version: '0'
85
+ version: '13.1'
74
86
  description: Simple library for binding & group querying on top of various LDAP implementations
75
87
  email:
76
88
  - jomara@redhat.com
@@ -98,6 +110,8 @@ files:
98
110
  - lib/ldap_fluff/generic.rb
99
111
  - lib/ldap_fluff/generic_member_service.rb
100
112
  - lib/ldap_fluff/ldap_fluff.rb
113
+ - lib/ldap_fluff/netiq.rb
114
+ - lib/ldap_fluff/netiq_member_service.rb
101
115
  - lib/ldap_fluff/posix.rb
102
116
  - lib/ldap_fluff/posix_member_service.rb
103
117
  - lib/ldap_fluff/posix_netgroup_member_service.rb
@@ -109,14 +123,16 @@ files:
109
123
  - test/ipa_test.rb
110
124
  - test/ldap_test.rb
111
125
  - test/lib/ldap_test_helper.rb
126
+ - test/netiq_member_services_test.rb
127
+ - test/netiq_test.rb
112
128
  - test/posix_member_services_test.rb
113
129
  - test/posix_netgroup_member_services_test.rb
114
130
  - test/posix_test.rb
115
131
  homepage: https://github.com/theforeman/ldap_fluff
116
132
  licenses:
117
- - GPLv2
133
+ - GPL-2.0-only
118
134
  metadata: {}
119
- post_install_message:
135
+ post_install_message:
120
136
  rdoc_options: []
121
137
  require_paths:
122
138
  - lib
@@ -124,26 +140,31 @@ required_ruby_version: !ruby/object:Gem::Requirement
124
140
  requirements:
125
141
  - - ">="
126
142
  - !ruby/object:Gem::Version
127
- version: 2.4.0
143
+ version: '2.7'
144
+ - - "<"
145
+ - !ruby/object:Gem::Version
146
+ version: '4'
128
147
  required_rubygems_version: !ruby/object:Gem::Requirement
129
148
  requirements:
130
149
  - - ">="
131
150
  - !ruby/object:Gem::Version
132
151
  version: '0'
133
152
  requirements: []
134
- rubygems_version: 3.1.4
135
- signing_key:
153
+ rubygems_version: 3.3.27
154
+ signing_key:
136
155
  specification_version: 4
137
156
  summary: LDAP querying tools for Active Directory, FreeIPA and POSIX-style
138
157
  test_files:
139
- - test/lib/ldap_test_helper.rb
158
+ - test/ad_member_services_test.rb
140
159
  - test/ad_test.rb
141
160
  - test/config_test.rb
142
161
  - test/ipa_member_services_test.rb
143
162
  - test/ipa_netgroup_member_services_test.rb
144
163
  - test/ipa_test.rb
145
164
  - test/ldap_test.rb
165
+ - test/lib/ldap_test_helper.rb
166
+ - test/netiq_member_services_test.rb
167
+ - test/netiq_test.rb
146
168
  - test/posix_member_services_test.rb
147
169
  - test/posix_netgroup_member_services_test.rb
148
170
  - test/posix_test.rb
149
- - test/ad_member_services_test.rb