activeldap 1.0.2 → 1.0.9

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.
Files changed (109) hide show
  1. data/CHANGES +32 -0
  2. data/README +8 -1
  3. data/data/locale/en/LC_MESSAGES/active-ldap.mo +0 -0
  4. data/data/locale/ja/LC_MESSAGES/active-ldap.mo +0 -0
  5. data/examples/al-admin/app/controllers/{application.rb → application_controller.rb} +3 -1
  6. data/examples/al-admin/app/views/account/sign_up.html.erb +6 -5
  7. data/examples/al-admin/config/boot.rb +1 -0
  8. data/examples/al-admin/config/environment.rb +4 -2
  9. data/examples/al-admin/config.ru +7 -0
  10. data/examples/al-admin/lib/ldap_test_helper.rb +38 -0
  11. data/examples/al-admin/lib/tasks/gettext.rake +3 -2
  12. data/examples/al-admin/lib/tasks/testing.rake +10 -0
  13. data/examples/al-admin/po/en/al-admin.po +4 -4
  14. data/examples/al-admin/po/ja/al-admin.po +4 -4
  15. data/examples/al-admin/po/nl/al-admin.po +3 -3
  16. data/examples/al-admin/public/dispatch.cgi +2 -2
  17. data/examples/al-admin/public/dispatch.fcgi +1 -1
  18. data/examples/al-admin/public/dispatch.rb +2 -2
  19. data/examples/al-admin/test/functional/account_controller_test.rb +2 -14
  20. data/examples/al-admin/test/functional/attributes_controller_test.rb +2 -12
  21. data/examples/al-admin/test/functional/directory_controller_test.rb +2 -12
  22. data/examples/al-admin/test/functional/object_classes_controller_test.rb +2 -12
  23. data/examples/al-admin/test/functional/syntaxes_controller_test.rb +2 -12
  24. data/examples/al-admin/test/functional/users_controller_test.rb +2 -12
  25. data/examples/al-admin/test/functional/welcome_controller_test.rb +2 -12
  26. data/examples/al-admin/test/integration/sign_up_test.rb +44 -0
  27. data/examples/al-admin/test/run-test.sh +1 -1
  28. data/examples/al-admin/test/test_helper.rb +25 -1
  29. data/examples/al-admin/test/unit/user_test.rb +1 -2
  30. data/examples/groupadd +2 -2
  31. data/examples/groupdel +2 -2
  32. data/examples/groupls +2 -2
  33. data/examples/groupmod +2 -2
  34. data/examples/lpasswd +2 -2
  35. data/examples/objects/group.rb +2 -2
  36. data/examples/objects/user.rb +1 -1
  37. data/examples/ouadd +2 -2
  38. data/examples/useradd +2 -2
  39. data/examples/useradd-binary +6 -3
  40. data/examples/userdel +2 -2
  41. data/examples/userls +2 -2
  42. data/examples/usermod +2 -2
  43. data/examples/usermod-binary-add +6 -3
  44. data/examples/usermod-binary-add-time +6 -3
  45. data/examples/usermod-binary-del +2 -2
  46. data/examples/usermod-lang-add +2 -2
  47. data/lib/active_ldap/adapter/base.rb +47 -23
  48. data/lib/active_ldap/adapter/jndi.rb +30 -28
  49. data/lib/active_ldap/adapter/jndi_connection.rb +6 -0
  50. data/lib/active_ldap/adapter/ldap.rb +25 -26
  51. data/lib/active_ldap/adapter/net_ldap.rb +28 -33
  52. data/lib/active_ldap/adapter/net_ldap_ext.rb +0 -6
  53. data/lib/active_ldap/association/proxy.rb +2 -1
  54. data/lib/active_ldap/attributes.rb +31 -0
  55. data/lib/active_ldap/base.rb +75 -31
  56. data/lib/active_ldap/compatible.rb +44 -0
  57. data/lib/active_ldap/configuration.rb +3 -3
  58. data/lib/active_ldap/connection.rb +41 -12
  59. data/lib/active_ldap/distinguished_name.rb +1 -0
  60. data/lib/active_ldap/get_text.rb +0 -7
  61. data/lib/active_ldap/ldif.rb +59 -44
  62. data/lib/active_ldap/operations.rb +41 -10
  63. data/lib/active_ldap/schema.rb +41 -6
  64. data/lib/active_ldap/user_password.rb +7 -7
  65. data/lib/active_ldap/validations.rb +24 -12
  66. data/lib/active_ldap/xml.rb +2 -2
  67. data/lib/active_ldap.rb +120 -139
  68. data/po/en/active-ldap.po +5 -5
  69. data/po/ja/active-ldap.po +5 -5
  70. data/rails/README +2 -2
  71. data/rails/init.rb +2 -2
  72. data/test/al-test-utils.rb +11 -4
  73. data/test/run-test.rb +6 -2
  74. data/test/test_associations.rb +4 -4
  75. data/test/test_attributes.rb +3 -1
  76. data/test/test_base.rb +75 -15
  77. data/test/test_base_per_instance.rb +7 -1
  78. data/test/test_bind.rb +4 -4
  79. data/test/test_connection.rb +36 -14
  80. data/test/test_connection_per_class.rb +5 -5
  81. data/test/test_connection_per_dn.rb +11 -5
  82. data/test/test_groupadd.rb +2 -2
  83. data/test/test_groupdel.rb +2 -2
  84. data/test/test_groupls.rb +1 -1
  85. data/test/test_groupmod.rb +2 -2
  86. data/test/test_ldif.rb +11 -1
  87. data/test/test_schema.rb +38 -2
  88. data/test/test_syntax.rb +12 -2
  89. data/test/test_useradd-binary.rb +1 -0
  90. data/test/test_usermod-binary-add-time.rb +1 -0
  91. data/test/test_usermod-binary-add.rb +1 -0
  92. data/test/test_validation.rb +24 -13
  93. data/test-unit/lib/test/unit/assertions.rb +97 -14
  94. data/test-unit/lib/test/unit/autorunner.rb +20 -4
  95. data/test-unit/lib/test/unit/priority.rb +21 -1
  96. data/test-unit/lib/test/unit/ui/console/testrunner.rb +7 -4
  97. data/test-unit/test/test_assertions.rb +52 -5
  98. metadata +10 -14
  99. data/rails/plugin/active_ldap/README +0 -54
  100. data/rails/plugin/active_ldap/generators/README +0 -2
  101. data/rails/plugin/active_ldap/generators/model_active_ldap/USAGE +0 -17
  102. data/rails/plugin/active_ldap/generators/model_active_ldap/model_active_ldap_generator.rb +0 -70
  103. data/rails/plugin/active_ldap/generators/model_active_ldap/templates/fixtures.yml +0 -11
  104. data/rails/plugin/active_ldap/generators/model_active_ldap/templates/model_active_ldap.rb +0 -3
  105. data/rails/plugin/active_ldap/generators/model_active_ldap/templates/unit_test.rb +0 -10
  106. data/rails/plugin/active_ldap/generators/scaffold_active_ldap/scaffold_active_ldap_generator.rb +0 -7
  107. data/rails/plugin/active_ldap/generators/scaffold_al/scaffold_al_generator.rb +0 -20
  108. data/rails/plugin/active_ldap/init.rb +0 -36
  109. data/rails_generators/scaffold_al/scaffold_al_generator.rb +0 -20
@@ -21,7 +21,6 @@ module ActiveLdap
21
21
  }
22
22
 
23
23
  def connect(options={})
24
- @bound = false
25
24
  super do |host, port, method|
26
25
  config = {
27
26
  :host => host,
@@ -41,11 +40,14 @@ module ActiveLdap
41
40
  end
42
41
 
43
42
  def unbind(options={})
44
- log("unbind") {@bound = false}
43
+ super do
44
+ log("unbind") do
45
+ @connection.close # Net::LDAP doesn't implement unbind.
46
+ end
47
+ end
45
48
  end
46
49
 
47
50
  def bind(options={})
48
- @bound = false
49
51
  begin
50
52
  super
51
53
  rescue Net::LDAP::LdapError
@@ -55,16 +57,11 @@ module ActiveLdap
55
57
 
56
58
  def bind_as_anonymous(options={})
57
59
  super do
58
- @bound = false
59
60
  execute(:bind, {:name => "bind: anonymous"}, {:method => :anonymous})
60
- @bound = true
61
+ true
61
62
  end
62
63
  end
63
64
 
64
- def bound?
65
- connecting? and @bound
66
- end
67
-
68
65
  def search(options={}, &block)
69
66
  super(options) do |base, scope, filter, attrs, limit, callback|
70
67
  args = {
@@ -97,38 +94,38 @@ module ActiveLdap
97
94
  end
98
95
 
99
96
  def add(dn, entries, options={})
100
- super do |dn, entries|
97
+ super do |_dn, _entries|
101
98
  attributes = {}
102
- entries.each do |type, key, attrs|
99
+ _entries.each do |type, key, attrs|
103
100
  attrs.each do |name, values|
104
101
  attributes[name] = values
105
102
  end
106
103
  end
107
- args = {:dn => dn, :attributes => attributes}
104
+ args = {:dn => _dn, :attributes => attributes}
108
105
  info = args.dup
109
106
  execute(:add, info, args)
110
107
  end
111
108
  end
112
109
 
113
110
  def modify(dn, entries, options={})
114
- super do |dn, entries|
115
- info = {:dn => dn, :attributes => entries}
111
+ super do |_dn, _entries|
112
+ info = {:dn => _dn, :attributes => _entries}
116
113
  execute(:modify, info,
117
- :dn => dn,
118
- :operations => parse_entries(entries))
114
+ :dn => _dn,
115
+ :operations => parse_entries(_entries))
119
116
  end
120
117
  end
121
118
 
122
119
  def modify_rdn(dn, new_rdn, delete_old_rdn, new_superior, options={})
123
- super do |dn, new_rdn, delete_old_rdn, new_superior|
120
+ super do |_dn, _new_rdn, _delete_old_rdn, _new_superior|
124
121
  info = {
125
- :name => "modify: RDN", :dn => dn, :new_rdn => new_rdn,
126
- :delete_old_rdn => delete_old_rdn,
122
+ :name => "modify: RDN",
123
+ :dn => _dn, :new_rdn => _new_rdn, :delete_old_rdn => _delete_old_rdn,
127
124
  }
128
125
  execute(:rename, info,
129
- :olddn => dn,
130
- :newrdn => new_rdn,
131
- :delete_attributes => delete_old_rdn)
126
+ :olddn => _dn,
127
+ :newrdn => _new_rdn,
128
+ :delete_attributes => _delete_old_rdn)
132
129
  end
133
130
  end
134
131
 
@@ -183,24 +180,23 @@ module ActiveLdap
183
180
  end
184
181
 
185
182
  def sasl_bind(bind_dn, options={})
186
- super do |bind_dn, mechanism, quiet|
183
+ super do |_bind_dn, mechanism, quiet|
187
184
  normalized_mechanism = mechanism.downcase.gsub(/-/, '_')
188
185
  sasl_bind_setup = "sasl_bind_setup_#{normalized_mechanism}"
189
186
  next unless respond_to?(sasl_bind_setup, true)
190
187
  initial_credential, challenge_response =
191
- send(sasl_bind_setup, bind_dn, options)
188
+ send(sasl_bind_setup, _bind_dn, options)
192
189
  args = {
193
190
  :method => :sasl,
194
191
  :initial_credential => initial_credential,
195
192
  :mechanism => mechanism,
196
193
  :challenge_response => challenge_response,
197
194
  }
198
- @bound = false
199
195
  info = {
200
- :name => "bind: SASL", :dn => bind_dn, :mechanism => mechanism,
196
+ :name => "bind: SASL", :dn => _bind_dn, :mechanism => mechanism,
201
197
  }
202
198
  execute(:bind, info, args)
203
- @bound = true
199
+ true
204
200
  end
205
201
  end
206
202
 
@@ -264,15 +260,14 @@ module ActiveLdap
264
260
  end
265
261
 
266
262
  def simple_bind(bind_dn, options={})
267
- super do |bind_dn, passwd|
263
+ super do |_bind_dn, password|
268
264
  args = {
269
265
  :method => :simple,
270
- :username => bind_dn,
271
- :password => passwd,
266
+ :username => _bind_dn,
267
+ :password => password,
272
268
  }
273
- @bound = false
274
- execute(:bind, {:dn => bind_dn}, args)
275
- @bound = true
269
+ execute(:bind, {:dn => _bind_dn}, args)
270
+ true
276
271
  end
277
272
  end
278
273
 
@@ -18,12 +18,6 @@ module Net
18
18
  def original_attribute_names
19
19
  @original_attribute_names.compact.uniq
20
20
  end
21
-
22
- def each_attribute
23
- attribute_names.sort_by {|name| name.to_s}.each do |name|
24
- yield name, self[name]
25
- end
26
- end
27
21
  end
28
22
  end
29
23
  end
@@ -3,12 +3,13 @@ module ActiveLdap
3
3
  class Proxy
4
4
  alias_method :proxy_respond_to?, :respond_to?
5
5
  alias_method :proxy_extend, :extend
6
+ delegate :to_param, :to => :target
6
7
 
7
8
  def initialize(owner, options)
8
9
  @owner = owner
9
10
  @options = options
10
- extend(options[:extend]) if options[:extend]
11
11
  reset
12
+ extend(options[:extend]) if options[:extend]
12
13
  end
13
14
 
14
15
  def respond_to?(symbol, include_priv=false)
@@ -26,10 +26,41 @@ module ActiveLdap
26
26
  value.values.all? {|val| blank_value?(val)}
27
27
  when Array
28
28
  value.all? {|val| blank_value?(val)}
29
+ when String
30
+ /\A\s*\z/ =~ value
31
+ when nil
32
+ true
29
33
  else
30
34
  value.blank?
31
35
  end
32
36
  end
37
+
38
+ def remove_blank_value(value)
39
+ case value
40
+ when Hash
41
+ result = {}
42
+ value.each do |k, v|
43
+ result[k] = remove_blank_value(v) || []
44
+ end
45
+ result
46
+ when Array
47
+ result = []
48
+ value.each do |v|
49
+ v = remove_blank_value(v)
50
+ next if v.nil?
51
+ result << v
52
+ end
53
+ result
54
+ when String
55
+ if /\A\s*\z/ =~ value
56
+ nil
57
+ else
58
+ value
59
+ end
60
+ else
61
+ value
62
+ end
63
+ end
33
64
  end
34
65
 
35
66
  module Normalizable
@@ -44,6 +44,24 @@ module ActiveLdap
44
44
  # Multiple entries become lists.
45
45
  # If this isn't read-only then lists become multiple entries, etc.
46
46
 
47
+ class << self
48
+ include GetTextSupport
49
+ def const_missing(id)
50
+ case id
51
+ when :ConnectionNotEstablished
52
+ message =
53
+ _("ActiveLdap::ConnectionNotEstablished has been deprecated " \
54
+ "since 1.1.0. " \
55
+ "Please use ActiveLdap::ConnectionNotSetup instead.")
56
+ ActiveSupport::Deprecation.warn(message)
57
+ const_set("ConnectionNotEstablished", ConnectionNotSetup)
58
+ ConnectionNotEstablished
59
+ else
60
+ super
61
+ end
62
+ end
63
+ end
64
+
47
65
  class Error < StandardError
48
66
  include GetTextSupport
49
67
  end
@@ -155,13 +173,16 @@ module ActiveLdap
155
173
  NEAREST_MARK = "|@|"
156
174
  private
157
175
  def detect_nearest(line, column)
158
- nearest = @ldif.to_a[line - 1] || ""
176
+ lines = Compatible.string_to_lines(@ldif).to_a
177
+ nearest = lines[line - 1] || ""
159
178
  if column - 1 == nearest.size # for JRuby 1.0.2 :<
160
179
  nearest << NEAREST_MARK
161
180
  else
162
181
  nearest[column - 1, 0] = NEAREST_MARK
163
182
  end
164
- nearest = "#{@ldif.to_a[line - 2]}#{nearest}" if nearest == NEAREST_MARK
183
+ if nearest == NEAREST_MARK
184
+ nearest = "#{lines[line - 2]}#{nearest}"
185
+ end
165
186
  nearest
166
187
  end
167
188
 
@@ -182,7 +203,7 @@ module ActiveLdap
182
203
 
183
204
  def numbered_ldif
184
205
  return @ldif if @ldif.blank?
185
- lines = @ldif.to_a
206
+ lines = Compatible.string_to_lines(@ldif)
186
207
  format = "%#{Math.log10(lines.size).truncate + 1}d: %s"
187
208
  i = 0
188
209
  lines.collect do |line|
@@ -207,7 +228,7 @@ module ActiveLdap
207
228
  class OperationNotPermitted < Error
208
229
  end
209
230
 
210
- class ConnectionNotEstablished < Error
231
+ class ConnectionNotSetup < Error
211
232
  end
212
233
 
213
234
  class AdapterNotSpecified < Error
@@ -288,7 +309,6 @@ module ActiveLdap
288
309
  end
289
310
  def #{sym}; self.class.#{sym}; end
290
311
  def self.#{sym}=(value); @#{sym} = value; end
291
- def #{sym}=(value); self.class.#{sym} = value; end
292
312
  EOS
293
313
  end
294
314
  end
@@ -340,13 +360,24 @@ module ActiveLdap
340
360
  # search() requests. Be warned.
341
361
  # :retry_on_timeout - whether to reconnect when timeouts occur. Defaults
342
362
  # to true
343
- # See lib/configuration.rb for defaults for each option
344
- def establish_connection(config=nil)
363
+ # See lib/active_ldap/configuration.rb for defaults for each option
364
+ def setup_connection(config=nil)
345
365
  super
346
366
  ensure_logger
347
367
  nil
348
368
  end
349
369
 
370
+ # establish_connection is deprecated since 1.1.0. Please use
371
+ # setup_connection() instead.
372
+ def establish_connection(config=nil)
373
+ message =
374
+ _("ActiveLdap::Base.establish_connection has been deprecated " \
375
+ "since 1.1.0. " \
376
+ "Please use ActiveLdap::Base.setup_connection instead.")
377
+ ActiveSupport::Deprecation.warn(message)
378
+ setup_connection(config)
379
+ end
380
+
350
381
  def create(attributes=nil, &block)
351
382
  if attributes.is_a?(Array)
352
383
  attributes.collect {|attrs| create(attrs, &block)}
@@ -473,7 +504,7 @@ module ActiveLdap
473
504
  end
474
505
  end
475
506
 
476
- def self_and_descendents_from_active_ldap
507
+ def self_and_descendants_from_active_ldap
477
508
  klass = self
478
509
  classes = [klass]
479
510
  while klass != klass.base_class
@@ -483,11 +514,17 @@ module ActiveLdap
483
514
  rescue
484
515
  [self]
485
516
  end
486
- alias_method(:self_and_descendents_from_active_record,
487
- :self_and_descendents_from_active_ldap)
517
+ if ActiveRecord::Base.respond_to?(:self_and_descendents_from_active_record)
518
+ # ActiveRecord 2.2.2 has a typo. :<
519
+ alias_method(:self_and_descendents_from_active_record,
520
+ :self_and_descendants_from_active_ldap)
521
+ else
522
+ alias_method(:self_and_descendants_from_active_record,
523
+ :self_and_descendants_from_active_ldap)
524
+ end
488
525
 
489
526
  def human_name(options={})
490
- defaults = self_and_descendents_from_active_ldap.collect do |klass|
527
+ defaults = self_and_descendants_from_active_ldap.collect do |klass|
491
528
  if klass.name.blank?
492
529
  nil
493
530
  else
@@ -563,20 +600,16 @@ module ActiveLdap
563
600
  end
564
601
 
565
602
  def default_dn_attribute
566
- if name.empty?
567
- dn_attribute = nil
568
- parent_class = ancestors[1]
569
- if parent_class.respond_to?(:dn_attribute)
570
- dn_attribute = parent_class.dn_attribute
571
- end
572
- dn_attribute || "cn"
573
- else
574
- name.demodulize.underscore
603
+ dn_attribute = nil
604
+ parent_class = ancestors[1]
605
+ if parent_class.respond_to?(:dn_attribute)
606
+ dn_attribute = parent_class.dn_attribute
575
607
  end
608
+ dn_attribute || "cn"
576
609
  end
577
610
 
578
611
  def default_prefix
579
- if name.empty?
612
+ if name.blank?
580
613
  nil
581
614
  else
582
615
  "ou=#{name.demodulize.pluralize}"
@@ -666,7 +699,7 @@ module ActiveLdap
666
699
 
667
700
  def attribute_present?(name)
668
701
  values = get_attribute(name, true)
669
- !values.empty? or values.any? {|x| not (x and x.empty?)}
702
+ !values.empty? or values.any? {|x| !(x and x.empty?)}
670
703
  end
671
704
 
672
705
  # exist?
@@ -863,7 +896,7 @@ module ActiveLdap
863
896
 
864
897
  def to_xml(options={})
865
898
  options = options.dup
866
- options[:root] ||= self.class.name.underscore
899
+ options[:root] ||= (self.class.name || '').underscore
867
900
  except = options[:except]
868
901
  if except
869
902
  options[:except] = except.collect do |name|
@@ -883,7 +916,7 @@ module ActiveLdap
883
916
 
884
917
  def have_attribute?(name, except=[])
885
918
  real_name = to_real_attribute_name(name)
886
- real_name and !except.include?(real_name)
919
+ !real_name.nil? and !except.include?(real_name)
887
920
  end
888
921
  alias_method :has_attribute?, :have_attribute?
889
922
 
@@ -930,7 +963,7 @@ module ActiveLdap
930
963
  end
931
964
  config = {:bind_dn => dn, :allow_anonymous => false}.merge(config)
932
965
  config[:password_block] ||= block if block_given?
933
- establish_connection(config)
966
+ setup_connection(config)
934
967
 
935
968
  before_connection = @connection
936
969
  begin
@@ -970,8 +1003,8 @@ module ActiveLdap
970
1003
  end.join(",")
971
1004
  end
972
1005
 
973
- undef_method :base=
974
1006
  def base=(object_local_base)
1007
+ ensure_update_dn
975
1008
  @dn = nil
976
1009
  @base = object_local_base
977
1010
  end
@@ -981,7 +1014,6 @@ module ActiveLdap
981
1014
  @scope || scope_of_class
982
1015
  end
983
1016
 
984
- undef_method :scope=
985
1017
  def scope=(scope)
986
1018
  self.class.validate_scope(scope)
987
1019
  @scope = scope
@@ -1061,6 +1093,8 @@ module ActiveLdap
1061
1093
 
1062
1094
  def initialize_by_ldap_data(dn, attributes)
1063
1095
  init_base
1096
+ dn = Compatible.convert_to_utf8_encoded_object(dn)
1097
+ attributes = Compatible.convert_to_utf8_encoded_object(attributes)
1064
1098
  @dn = dn
1065
1099
  @new_entry = false
1066
1100
  @dn_is_base = false
@@ -1084,7 +1118,7 @@ module ActiveLdap
1084
1118
  obj
1085
1119
  end
1086
1120
 
1087
- def to_real_attribute_name(name, allow_normalized_name=false)
1121
+ def to_real_attribute_name(name, allow_normalized_name=true)
1088
1122
  return name if name.nil?
1089
1123
  if allow_normalized_name
1090
1124
  entry_attribute.normalize(name, allow_normalized_name) ||
@@ -1356,8 +1390,12 @@ module ActiveLdap
1356
1390
 
1357
1391
  next if v == value
1358
1392
 
1393
+ x = value
1394
+ value = self.class.remove_blank_value(value) || []
1395
+ next if v == value
1396
+
1359
1397
  # Create mod entries
1360
- if value.empty?
1398
+ if self.class.blank_value?(value)
1361
1399
  # Since some types do not have equality matching rules,
1362
1400
  # delete doesn't work
1363
1401
  # Replacing with nothing is equivalent.
@@ -1372,7 +1410,11 @@ module ActiveLdap
1372
1410
  end
1373
1411
  data.each do |k, v|
1374
1412
  value = v || []
1375
- next if ldap_data.has_key?(k) or value.empty?
1413
+ next if ldap_data.has_key?(k)
1414
+
1415
+ value = self.class.remove_blank_value(value) || []
1416
+ next if self.class.blank_value?(value)
1417
+
1376
1418
 
1377
1419
  # Detect subtypes and account for them
1378
1420
  # REPLACE will function like ADD, but doesn't hit EQUALITY problems
@@ -1393,7 +1435,9 @@ module ActiveLdap
1393
1435
  oc_value = data['objectClass']
1394
1436
  attributes.push(['objectClass', oc_value])
1395
1437
  data.each do |key, value|
1396
- next if value.empty? or key == 'objectClass' or key == dn_attr
1438
+ next if key == 'objectClass' or key == dn_attr
1439
+ value = self.class.remove_blank_value(value)
1440
+ next if self.class.blank_value?(value)
1397
1441
 
1398
1442
  attributes.push([key, value])
1399
1443
  end
@@ -0,0 +1,44 @@
1
+ module ActiveLdap
2
+ module Compatible
3
+ module_function
4
+ if "".respond_to?(:force_encoding)
5
+ def convert_to_utf8_encoded_object(object)
6
+ case object
7
+ when Array
8
+ object.collect {|element| convert_to_utf8_encoded_object(element)}
9
+ when Hash
10
+ encoded = {}
11
+ object.each do |key, value|
12
+ key = convert_to_utf8_encoded_object(key)
13
+ value = convert_to_utf8_encoded_object(value)
14
+ encoded[key] = value
15
+ end
16
+ encoded
17
+ when String
18
+ encoded = object.dup
19
+ encoded.force_encoding("utf-8")
20
+ encoded = object unless encoded.valid_encoding?
21
+ encoded
22
+ else
23
+ object
24
+ end
25
+ end
26
+ else
27
+ def convert_to_utf8_encoded_object(object)
28
+ object
29
+ end
30
+ end
31
+
32
+ if "".respond_to?(:lines)
33
+ def string_to_lines(string)
34
+ string.lines.to_a
35
+ end
36
+ else
37
+ def string_to_lines(string)
38
+ ary = []
39
+ string.each_line{|l| ary << l}
40
+ ary
41
+ end
42
+ end
43
+ end
44
+ end
@@ -31,14 +31,14 @@ module ActiveLdap
31
31
  DEFAULT_CONFIG[:password] = nil
32
32
  DEFAULT_CONFIG[:store_password] = true
33
33
  DEFAULT_CONFIG[:allow_anonymous] = true
34
- DEFAULT_CONFIG[:sasl_quiet] = false
34
+ DEFAULT_CONFIG[:sasl_quiet] = true
35
35
  DEFAULT_CONFIG[:try_sasl] = false
36
36
  # See http://www.iana.org/assignments/sasl-mechanisms
37
37
  DEFAULT_CONFIG[:sasl_mechanisms] = ["GSSAPI", "DIGEST-MD5",
38
38
  "CRAM-MD5", "EXTERNAL"]
39
39
 
40
- DEFAULT_CONFIG[:retry_limit] = 3
41
- DEFAULT_CONFIG[:retry_wait] = 3
40
+ DEFAULT_CONFIG[:retry_limit] = 1
41
+ DEFAULT_CONFIG[:retry_wait] = 1
42
42
  DEFAULT_CONFIG[:timeout] = 0 # in seconds; 0 <= Never timeout
43
43
  # Whether or not to retry on timeouts
44
44
  DEFAULT_CONFIG[:retry_on_timeout] = true
@@ -55,7 +55,7 @@ module ActiveLdap
55
55
  def clear_active_connection_name
56
56
  @active_connection_name = nil
57
57
  ObjectSpace.each_object(Class) do |klass|
58
- if klass < self and !klass.name.empty?
58
+ if klass < self and !klass.name.blank?
59
59
  klass.instance_variable_set("@active_connection_name", nil)
60
60
  end
61
61
  end
@@ -81,9 +81,9 @@ module ActiveLdap
81
81
  config = adapter
82
82
  self.connection = instantiate_adapter(config)
83
83
  elsif adapter.nil?
84
- raise ConnectionNotEstablished
84
+ raise ConnectionNotSetup
85
85
  else
86
- establish_connection(adapter)
86
+ setup_connection(adapter)
87
87
  end
88
88
  end
89
89
 
@@ -115,15 +115,15 @@ module ActiveLdap
115
115
  def retrieve_connection
116
116
  conn = nil
117
117
  name = active_connection_name
118
- raise ConnectionNotEstablished unless name
118
+ raise ConnectionNotSetup unless name
119
119
  conn = active_connections[name]
120
120
  if conn.nil?
121
121
  config = configuration(name)
122
- raise ConnectionNotEstablished unless config
122
+ raise ConnectionNotSetup unless config
123
123
  self.connection = config
124
124
  conn = active_connections[name]
125
125
  end
126
- raise ConnectionNotEstablished if conn.nil?
126
+ raise ConnectionNotSetup if conn.nil?
127
127
  conn
128
128
  end
129
129
 
@@ -136,12 +136,12 @@ module ActiveLdap
136
136
  config = configuration(key)
137
137
  conn = active_connections[key]
138
138
  remove_configuration_by_configuration(config)
139
- active_connections.delete_if {|key, value| value == conn}
139
+ active_connections.delete_if {|_key, value| value == conn}
140
140
  conn.disconnect! if conn
141
141
  config
142
142
  end
143
143
 
144
- def establish_connection(config=nil)
144
+ def setup_connection(config=nil)
145
145
  config = ensure_configuration(config)
146
146
  remove_connection
147
147
 
@@ -151,6 +151,15 @@ module ActiveLdap
151
151
  define_configuration(key, merge_configuration(config))
152
152
  end
153
153
 
154
+ def establish_connection(config=nil)
155
+ message =
156
+ _("ActiveLdap::Connection.establish_connection has been deprecated " \
157
+ "since 1.1.0. " \
158
+ "Please use ActiveLdap::Connection.setup_connection instead.")
159
+ ActiveSupport::Deprecation.warn(message)
160
+ setup_connection(config)
161
+ end
162
+
154
163
  # Return the schema object
155
164
  def schema
156
165
  connection.schema
@@ -164,7 +173,7 @@ module ActiveLdap
164
173
 
165
174
  private
166
175
  def active_connection_key(k=self)
167
- k.name.empty? ? k.object_id : k.name
176
+ k.name.blank? ? k.object_id : k.name
168
177
  end
169
178
 
170
179
  def determine_active_connection_name
@@ -191,11 +200,22 @@ module ActiveLdap
191
200
  end
192
201
 
193
202
  def guess_available_adapter
194
- Object.respond_to?(:java) ? "jndi" : "ldap"
203
+ if Object.respond_to?(:java)
204
+ "jndi"
205
+ else
206
+ ldap_ldif_path = $LOAD_PATH.find do |path|
207
+ File.exist?(File.join(path, "ldap", "ldif.rb"))
208
+ end
209
+ if ldap_ldif_path
210
+ "ldap"
211
+ else
212
+ "net-ldap"
213
+ end
214
+ end
195
215
  end
196
216
  end
197
217
 
198
- def establish_connection(config=nil)
218
+ def setup_connection(config=nil)
199
219
  config = self.class.ensure_configuration(config)
200
220
  config = self.class.configuration.merge(config)
201
221
  config = self.class.merge_configuration(config, self)
@@ -204,6 +224,15 @@ module ActiveLdap
204
224
  self.class.define_configuration(dn, config)
205
225
  end
206
226
 
227
+ def establish_connection(config=nil)
228
+ message =
229
+ _("ActiveLdap::Connection#establish_connection has been deprecated " \
230
+ "since 1.1.0. " \
231
+ "Please use ActiveLdap::Connection#setup_connection instead.")
232
+ ActiveSupport::Deprecation.warn(message)
233
+ setup_connection(config)
234
+ end
235
+
207
236
  def remove_connection
208
237
  self.class.remove_connection(dn)
209
238
  @connection = nil
@@ -235,7 +264,7 @@ module ActiveLdap
235
264
  config = adapter
236
265
  @connection = self.class.instantiate_adapter(config)
237
266
  else
238
- establish_connection(adapter)
267
+ setup_connection(adapter)
239
268
  end
240
269
  end
241
270
 
@@ -124,6 +124,7 @@ module ActiveLdap
124
124
  result << scanner[1]
125
125
  end
126
126
  end
127
+ result.force_encoding("utf-8") if result.respond_to?(:force_encoding)
127
128
  result
128
129
  end
129
130
 
@@ -1,11 +1,4 @@
1
1
  if Object.const_defined?(:GetText)
2
- require 'active_record/version'
3
- active_record_version = [ActiveRecord::VERSION::MAJOR,
4
- ActiveRecord::VERSION::MINOR,
5
- ActiveRecord::VERSION::TINY]
6
- if (active_record_version <=> [2, 2, 0]) < 0
7
- require "gettext/active_record"
8
- end
9
2
  ActiveLdap.const_set("GetText", GetText)
10
3
  end
11
4