simple_ldap_authenticator 1.0.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +3 -1
  3. data/README +10 -12
  4. data/lib/simple_ldap_authenticator.rb +37 -35
  5. metadata +89 -52
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 370835649201c04c545cb53d363385e36b1d34ae4f3a1f08dd91b7f889725866
4
+ data.tar.gz: 9d3118b82945916bd3043b22304777891943ad7ee450b4855b0bfe09e816af55
5
+ SHA512:
6
+ metadata.gz: 0fce93068f8fb5d2e38f304860c6a4e7334a7bb408d0d3a75e41f5ff218c72107062dec33de8fd3455317296b98f6580bac7cb8a1c72c9ada4e0b5cec4d96715
7
+ data.tar.gz: c5b333d7c4b0359867a3176c0edb49fa1911cf329ebf41676049fa9999eb51bc57e931680a86c91e40cdee60112d3d57cbe9bdfe506e898b4f4ac32160429d98
data/LICENSE CHANGED
@@ -1,4 +1,6 @@
1
- Copyright (c) 2004-2007 Jeremy Evans
1
+ Copyright (c) 2006-2022 Jeremy Evans
2
+
3
+ test/ldapserver.rb Copyright (c) 2006-2011 by Francis Cianfrocca and other contributors.
2
4
 
3
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
6
  of this software and associated documentation files (the "Software"), to deal
data/README CHANGED
@@ -4,19 +4,17 @@ SimpleLdapAuthenticator
4
4
  Allows for simple authentication to an LDAP server with a minimum of
5
5
  configuration. Requires either Ruby/LDAP or Net::LDAP.
6
6
 
7
- Usage is fairly simple:
7
+ Example Usage:
8
+
8
9
  require 'simple_ldap_authenticator'
10
+ require 'logger'
11
+
9
12
  SimpleLdapAuthenticator.servers = %w'dc1.domain.com dc2.domain.com'
10
13
  SimpleLdapAuthenticator.use_ssl = true
11
- SimpleLdapAuthenticator.login_format = '%s @domain.com'
12
- SimpleLdapAuthenticator.logger = RAILS_DEFAULT_LOGGER
13
- class LoginController < ApplicationController
14
- def login
15
- return redirect_to(:action=>'try_again') unless \
16
- SimpleLdapAuthenticator.valid?(params[:username], \
17
- params[:password])
18
- session[:username] = params[:username]
19
- end
20
- end
14
+ SimpleLdapAuthenticator.login_format = '%s@domain.com'
15
+ SimpleLdapAuthenticator.logger = Logger.new($stdout)
16
+
17
+ SimpleLdapAuthenticator.valid?(username, password)
18
+ # => true or false (or raise if there is an issue connecting to the server)
21
19
 
22
- github: http://github.com/jeremyevans/simple_ldap_authenticator/tree/master
20
+ github: http://github.com/jeremyevans/simple_ldap_authenticator
@@ -14,34 +14,33 @@
14
14
  # * servers = ['dc1.domain.com', 'dc2.domain.com'] # names/addresses of LDAP servers to use
15
15
  # * use_ssl = true # for logging in via LDAPS
16
16
  # * port = 3289 # instead of 389 for LDAP or 636 for LDAPS
17
- # * logger = RAILS_DEFAULT_LOGGER # for logging authentication successes/failures
17
+ # * logger = Logger.new($stdout) # for logging authentication successes/failures
18
18
  #
19
- # The class is used as a global variable, you are not supposed to create an
19
+ # The class is used as a singleton, you are not supposed to create an
20
20
  # instance of it. For example:
21
21
  #
22
- # require 'simple_ldap_authenticator'
23
- # SimpleLdapAuthenticator.servers = %w'dc1.domain.com dc2.domain.com'
24
- # SimpleLdapAuthenticator.use_ssl = true
25
- # SimpleLdapAuthenticator.login_format = '%s@domain.com'
26
- # SimpleLdapAuthenticator.logger = RAILS_DEFAULT_LOGGER
27
- # class LoginController < ApplicationController
28
- # def login
29
- # return redirect_to(:action=>'try_again') unless SimpleLdapAuthenticator.valid?(params[:username], params[:password])
30
- # session[:username] = params[:username]
31
- # end
32
- # end
22
+ # require 'simple_ldap_authenticator'
23
+ #
24
+ # SimpleLdapAuthenticator.servers = %w'dc1.domain.com dc2.domain.com'
25
+ # SimpleLdapAuthenticator.use_ssl = true
26
+ # SimpleLdapAuthenticator.login_format = '%s@domain.com'
27
+ #
28
+ # SimpleLdapAuthenticator.valid?(username, password)
29
+ # # => true or false (or raise if there is an issue connecting to the server)
33
30
  class SimpleLdapAuthenticator
31
+ @servers = ['127.0.0.1']
32
+ @use_ssl = false
33
+ @login_format = '%s'
34
+
34
35
  class << self
35
- @servers = ['127.0.0.1']
36
- @use_ssl = false
37
- @login_format = '%s'
38
- attr_accessor :servers, :use_ssl, :port, :login_format, :logger, :connection, :ldap_library
36
+ attr_accessor :servers, :use_ssl, :login_format, :logger, :ldap_library
37
+ attr_writer :port, :connection
39
38
 
40
39
  # Load the required LDAP library, either 'ldap' or 'net/ldap'
41
40
  def load_ldap_library
42
41
  return if @ldap_library_loaded
43
- if ldap_library
44
- if ldap_library == 'net/ldap'
42
+ if @ldap_library
43
+ if @ldap_library == 'net/ldap'
45
44
  require 'net/ldap'
46
45
  else
47
46
  require 'ldap'
@@ -51,10 +50,10 @@ class SimpleLdapAuthenticator
51
50
  begin
52
51
  require 'ldap'
53
52
  require 'ldap/control'
54
- ldap_library = 'ldap'
53
+ @ldap_library = 'ldap'
55
54
  rescue LoadError
56
55
  require 'net/ldap'
57
- ldap_library = 'net/ldap'
56
+ @ldap_library = 'net/ldap'
58
57
  end
59
58
  end
60
59
  @ldap_library_loaded = true
@@ -92,34 +91,37 @@ class SimpleLdapAuthenticator
92
91
 
93
92
  # Check the validity of a login/password combination
94
93
  def valid?(login, password)
95
- if password.to_s == ''
94
+ login = login.to_s
95
+ password = password.to_s
96
+ connection = self.connection
97
+ if password == '' || password.include?("\0") || login.include?("\0")
96
98
  false
97
99
  elsif ldap_library == 'net/ldap'
98
- connection.authenticate(login_format % login.to_s, password.to_s)
100
+ connection.authenticate(login_format % login, password)
99
101
  begin
100
102
  if connection.bind
101
- logger.info("Authenticated #{login.to_s} by #{server}") if logger
102
- true
103
- else
104
- logger.info("Error attempting to authenticate #{login.to_s} by #{server}: #{connection.get_operation_result.code} #{connection.get_operation_result.message}") if logger
105
- switch_server unless connection.get_operation_result.code == 49
106
- false
107
- end
108
- rescue Net::LDAP::LdapError => error
109
- logger.info("Error attempting to authenticate #{login.to_s} by #{server}: #{error.message}") if logger
103
+ logger.info("Authenticated #{login} by #{server}") if logger
104
+ true
105
+ else
106
+ logger.info("Error attempting to authenticate #{login} by #{server}: #{connection.get_operation_result.code} #{connection.get_operation_result.message}") if logger
107
+ switch_server unless connection.get_operation_result.code == 49
108
+ false
109
+ end
110
+ rescue Net::LDAP::Error, SocketError, SystemCallError => error
111
+ logger.info("Error attempting to authenticate #{login} by #{server}: #{error.message}") if logger
110
112
  switch_server
111
113
  false
112
114
  end
113
115
  else
114
116
  connection.unbind if connection.bound?
115
117
  begin
116
- connection.bind(login_format % login.to_s, password.to_s)
118
+ connection.bind(login_format % login, password)
117
119
  connection.unbind
118
- logger.info("Authenticated #{login.to_s} by #{server}") if logger
120
+ logger.info("Authenticated #{login} by #{server}") if logger
119
121
  true
120
122
  rescue LDAP::ResultError => error
121
123
  connection.unbind if connection.bound?
122
- logger.info("Error attempting to authenticate #{login.to_s} by #{server}: #{error.message}") if logger
124
+ logger.info("Error attempting to authenticate #{login} by #{server}: #{error.message}") if logger
123
125
  switch_server unless error.message == 'Invalid credentials'
124
126
  false
125
127
  end
metadata CHANGED
@@ -1,72 +1,109 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: simple_ldap_authenticator
3
- version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 0
9
- - 1
10
- version: 1.0.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Jeremy Evans
14
- autorequire:
8
+ autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2011-08-03 00:00:00 -07:00
19
- default_executable:
20
- dependencies: []
21
-
22
- description:
11
+ date: 2024-09-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest-global_expectations
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: eventmachine
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: net-ldap
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: ruby-ldap
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description:
23
70
  email: code@jeremyevans.net
24
71
  executables: []
25
-
26
72
  extensions: []
27
-
28
- extra_rdoc_files:
73
+ extra_rdoc_files:
29
74
  - LICENSE
30
- files:
31
- - README
75
+ files:
32
76
  - LICENSE
77
+ - README
33
78
  - lib/simple_ldap_authenticator.rb
34
- has_rdoc: true
35
- homepage:
79
+ homepage:
36
80
  licenses: []
37
-
38
- post_install_message:
39
- rdoc_options:
40
- - --inline-source
41
- - --line-numbers
81
+ metadata:
82
+ bug_tracker_uri: https://github.com/jeremyevans/simple_ldap_authenticator/issues
83
+ changelog_uri: https://github.com/jeremyevans/simple_ldap_authenticator/blob/master/CHANGELOG
84
+ mailing_list_uri: https://github.com/jeremyevans/simple_ldap_authenticator/discussions
85
+ source_code_uri: https://github.com/jeremyevans/simple_ldap_authenticator
86
+ post_install_message:
87
+ rdoc_options:
88
+ - "--inline-source"
89
+ - "--line-numbers"
42
90
  - README
43
91
  - lib
44
- require_paths:
92
+ require_paths:
45
93
  - lib
46
- required_ruby_version: !ruby/object:Gem::Requirement
47
- none: false
48
- requirements:
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
49
96
  - - ">="
50
- - !ruby/object:Gem::Version
51
- hash: 3
52
- segments:
53
- - 0
54
- version: "0"
55
- required_rubygems_version: !ruby/object:Gem::Requirement
56
- none: false
57
- requirements:
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
58
101
  - - ">="
59
- - !ruby/object:Gem::Version
60
- hash: 3
61
- segments:
62
- - 0
63
- version: "0"
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
64
104
  requirements: []
65
-
66
- rubyforge_project:
67
- rubygems_version: 1.3.7
68
- signing_key:
69
- specification_version: 3
105
+ rubygems_version: 3.5.16
106
+ signing_key:
107
+ specification_version: 4
70
108
  summary: Easy authentication to an LDAP server(s)
71
109
  test_files: []
72
-