ldap_fluff 0.3.4 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28f120e9600034857038687026da6b26a453c2b2
4
- data.tar.gz: 4c7793f94f748e29ee2cc0191a28c6f05ff9ff8d
3
+ metadata.gz: d9bbb3a76eb304f5d32ed7cb7b4cbc0e8b2551be
4
+ data.tar.gz: 179e0be4fe95dd4da12e036d64691fe8c8597df9
5
5
  SHA512:
6
- metadata.gz: 39b79a3b20b2285cb98d33b3d8c1e6c706d530f6ee818144e5f9b8f91295b508868750ad9d89e06af56f5f090d3e139799a5d3da8698ee05274e59e39500b2e1
7
- data.tar.gz: 91727abfcb17862ae23e5b7b6133e7449a68e3eacd7d8e8fb858d9afc215b44365e509a7471242395b468577cbd7bbac84dfd3853a5566d398cddc5137f1f2d1
6
+ metadata.gz: bdd878bcb8282f68359fac8376931d32b09f1c5b02b3fb25ca777855e3507460102711337129969f90f86ddc03a69a66ef97593c57956cebc4ef72e5154fd5bc
7
+ data.tar.gz: dbd1e8e105c879941c04a50b2c7e1a0aafa705e287ff38b2b62fbcd7bef983494c3ecaf517476ca5574409606208cb2192345dea3fac6e2307273c7c2e89d921
data/README.rdoc CHANGED
@@ -56,6 +56,7 @@ Your global configuration must provide information about your LDAP host to funct
56
56
  service_user: # service account for authenticating LDAP calls. required unless you enable anon
57
57
  service_pass: # service password for authenticating LDAP calls. required unless you enable anon
58
58
  anon_queries: # false by default, true if you don't want to use the service user
59
+ instrumentation_service: # nil by default, an object that supports the ActiveSupport::Notifications API
59
60
 
60
61
  You can pass these arguments as a hash to LdapFluff to get a valid LdapFluff object.
61
62
 
@@ -85,6 +86,17 @@ service_user (formatted as "ad_domain/username") and service_pass OR anon_querie
85
86
  ldap_fluff appends cn=groups,cn=accounts to the beginning of all BIND calls. You do not need to
86
87
  include this in your base_dn string
87
88
 
89
+ === Instrumentation
90
+
91
+ Both net-ldap and ldap_fluff support instrumentation of API calls, which can help debug performance issues or
92
+ to find what LDAP queries are being made.
93
+
94
+ The :instrumentation_service item in the configuration should support an equivalent API to
95
+ ActiveSupport::Notifications. ldap_fluff will use this and also pass it to net-ldap.
96
+
97
+ When using Rails, pass `:instrumentation_service => ActiveSupport::Notifications` and then subscribe to, and
98
+ optionally log events (e.g. https://gist.github.com/mnutt/566725).
99
+
88
100
  === License
89
101
 
90
102
  ldap_fluff is licensed under the GPLv2. Please read LICENSE for more information.
@@ -3,15 +3,17 @@ require 'active_support/core_ext/hash'
3
3
 
4
4
  class LdapFluff::Config
5
5
  ATTRIBUTES = %w[host port encryption base_dn group_base server_type service_user
6
- service_pass anon_queries attr_login search_filter]
6
+ service_pass anon_queries attr_login search_filter
7
+ instrumentation_service ]
7
8
  ATTRIBUTES.each { |attr| attr_reader attr.to_sym }
8
9
 
9
- DEFAULT_CONFIG = { 'port' => 389,
10
- 'encryption' => nil,
11
- 'base_dn' => 'dc=company,dc=com',
12
- 'group_base' => 'dc=company,dc=com',
13
- 'server_type' => :free_ipa,
14
- 'anon_queries' => false }
10
+ DEFAULT_CONFIG = { 'port' => 389,
11
+ 'encryption' => nil,
12
+ 'base_dn' => 'dc=company,dc=com',
13
+ 'group_base' => 'dc=company,dc=com',
14
+ 'server_type' => :free_ipa,
15
+ 'anon_queries' => false,
16
+ 'instrumentation_service' => nil }
15
17
 
16
18
  def initialize(config)
17
19
  raise ArgumentError unless config.respond_to?(:to_hash)
@@ -2,10 +2,11 @@ class LdapFluff::Generic
2
2
  attr_accessor :ldap, :member_service
3
3
 
4
4
  def initialize(config = {})
5
- @ldap = Net::LDAP.new(:host => config.host,
6
- :base => config.base_dn,
7
- :port => config.port,
8
- :encryption => config.encryption)
5
+ @ldap = Net::LDAP.new(:host => config.host,
6
+ :base => config.base_dn,
7
+ :port => config.port,
8
+ :encryption => config.encryption,
9
+ :instrumentation_service => config.instrumentation_service)
9
10
  @bind_user = config.service_user
10
11
  @bind_pass = config.service_pass
11
12
  @anon = config.anon_queries
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'net/ldap'
3
3
 
4
4
  class LdapFluff
5
- attr_accessor :ldap
5
+ attr_accessor :ldap, :instrumentation_service
6
6
 
7
7
  def initialize(config = {})
8
8
  config = LdapFluff::Config.new(config)
@@ -16,53 +16,85 @@ class LdapFluff
16
16
  else
17
17
  raise 'unknown server_type'
18
18
  end
19
+ @instrumentation_service = config.instrumentation_service
19
20
  end
20
21
 
21
22
  def authenticate?(uid, password)
22
- if password.nil? || password.empty?
23
- false
24
- else
25
- !!@ldap.bind?(uid, password)
23
+ instrument('authenticate.ldap_fluff', :uid => uid) do |payload|
24
+ if password.nil? || password.empty?
25
+ false
26
+ else
27
+ !!@ldap.bind?(uid, password)
28
+ end
26
29
  end
27
30
  end
28
31
 
29
32
  def test
30
- @ldap.ldap.open {}
33
+ instrument('test.ldap_fluff') do |payload|
34
+ @ldap.ldap.open {}
35
+ end
31
36
  end
32
37
 
33
38
  # return a list[] of users for a given gid
34
39
  def user_list(gid)
35
- @ldap.users_for_gid(gid)
40
+ instrument('user_list.ldap_fluff', :gid => gid) do |payload|
41
+ @ldap.users_for_gid(gid)
42
+ end
36
43
  end
37
44
 
38
45
  # return a list[] of groups for a given uid
39
46
  def group_list(uid)
40
- @ldap.groups_for_uid(uid)
47
+ instrument('group_list.ldap_fluff', :uid => uid) do |payload|
48
+ @ldap.groups_for_uid(uid)
49
+ end
41
50
  end
42
51
 
43
52
  # return true if a user is in all of the groups
44
53
  # in grouplist
45
54
  def is_in_groups?(uid, grouplist)
46
- @ldap.is_in_groups(uid, grouplist, true)
55
+ instrument('is_in_groups?.ldap_fluff', :uid => uid, :grouplist => grouplist) do |payload|
56
+ @ldap.is_in_groups(uid, grouplist, true)
57
+ end
47
58
  end
48
59
 
49
60
  # return true if uid exists
50
61
  def valid_user?(uid)
51
- @ldap.user_exists? uid
62
+ instrument('valid_user?.ldap_fluff', :uid => uid) do |payload|
63
+ @ldap.user_exists? uid
64
+ end
52
65
  end
53
66
 
54
67
  # return true if group exists
55
68
  def valid_group?(gid)
56
- @ldap.group_exists? gid
69
+ instrument('valid_group?.ldap_fluff', :gid => gid) do |payload|
70
+ @ldap.group_exists? gid
71
+ end
57
72
  end
58
73
 
59
74
  # return ldap entry
60
75
  def find_user(uid)
61
- @ldap.member_service.find_user(uid)
76
+ instrument('find_user.ldap_fluff', :uid => uid) do |payload|
77
+ @ldap.member_service.find_user(uid)
78
+ end
62
79
  end
63
80
 
64
81
  # return ldap entry
65
82
  def find_group(gid)
66
- @ldap.member_service.find_group(gid)
83
+ instrument('find_group.ldap_fluff', :gid => gid) do |payload|
84
+ @ldap.member_service.find_group(gid)
85
+ end
86
+ end
87
+
88
+ private
89
+
90
+ def instrument(event, payload = {})
91
+ payload = (payload || {}).dup
92
+ if instrumentation_service
93
+ instrumentation_service.instrument(event, payload) do |payload|
94
+ payload[:result] = yield(payload) if block_given?
95
+ end
96
+ else
97
+ yield(payload) if block_given?
98
+ end
67
99
  end
68
100
  end
data/test/config_test.rb CHANGED
@@ -22,4 +22,9 @@ class ConfigTest < MiniTest::Test
22
22
  assert_instance_of LdapFluff::FreeIPA, ldap.ldap
23
23
  end
24
24
 
25
+ def test_instrumentation_service
26
+ is = Object.new
27
+ net_ldap = LdapFluff.new(config_hash.update :instrumentation_service => is).ldap.ldap
28
+ assert_equal is, net_ldap.send(:instrumentation_service)
29
+ end
25
30
  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.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan O'Mara
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2015-03-22 00:00:00.000000000 Z
15
+ date: 2015-05-12 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: net-ldap
@@ -83,29 +83,29 @@ extra_rdoc_files:
83
83
  - README.rdoc
84
84
  - LICENSE
85
85
  files:
86
+ - LICENSE
87
+ - README.rdoc
86
88
  - lib/ldap_fluff.rb
87
- - lib/ldap_fluff/generic.rb
88
- - lib/ldap_fluff/generic_member_service.rb
89
+ - lib/ldap_fluff/active_directory.rb
90
+ - lib/ldap_fluff/ad_member_service.rb
91
+ - lib/ldap_fluff/config.rb
92
+ - lib/ldap_fluff/error.rb
89
93
  - lib/ldap_fluff/freeipa.rb
90
94
  - lib/ldap_fluff/freeipa_member_service.rb
91
- - lib/ldap_fluff/error.rb
95
+ - lib/ldap_fluff/generic.rb
96
+ - lib/ldap_fluff/generic_member_service.rb
92
97
  - lib/ldap_fluff/ldap_fluff.rb
93
- - lib/ldap_fluff/active_directory.rb
94
- - lib/ldap_fluff/posix_member_service.rb
95
- - lib/ldap_fluff/config.rb
96
98
  - lib/ldap_fluff/posix.rb
97
- - lib/ldap_fluff/ad_member_service.rb
99
+ - lib/ldap_fluff/posix_member_service.rb
98
100
  - test/ad_member_services_test.rb
99
- - test/config_test.rb
100
- - test/ldap_test.rb
101
- - test/posix_member_services_test.rb
102
101
  - test/ad_test.rb
103
- - test/ipa_test.rb
102
+ - test/config_test.rb
104
103
  - test/ipa_member_services_test.rb
104
+ - test/ipa_test.rb
105
+ - test/ldap_test.rb
105
106
  - test/lib/ldap_test_helper.rb
107
+ - test/posix_member_services_test.rb
106
108
  - test/posix_test.rb
107
- - README.rdoc
108
- - LICENSE
109
109
  homepage: https://github.com/theforeman/ldap_fluff
110
110
  licenses:
111
111
  - GPLv2
@@ -126,18 +126,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
126
  version: '0'
127
127
  requirements: []
128
128
  rubyforge_project:
129
- rubygems_version: 2.0.3
129
+ rubygems_version: 2.4.4
130
130
  signing_key:
131
131
  specification_version: 4
132
132
  summary: LDAP querying tools for Active Directory, FreeIPA and POSIX-style
133
133
  test_files:
134
- - test/ad_member_services_test.rb
135
- - test/config_test.rb
136
- - test/ldap_test.rb
134
+ - test/ipa_member_services_test.rb
137
135
  - test/posix_member_services_test.rb
138
136
  - test/ad_test.rb
139
137
  - test/ipa_test.rb
140
- - test/ipa_member_services_test.rb
138
+ - test/ldap_test.rb
141
139
  - test/lib/ldap_test_helper.rb
142
140
  - test/posix_test.rb
143
- has_rdoc: true
141
+ - test/ad_member_services_test.rb
142
+ - test/config_test.rb