Defect #8978 » ldap_timeout_v2-redmine2.0.3.patch
config/locales/en.yml (working copy) | ||
---|---|---|
142 | 142 | |
143 | 143 |
notice_account_updated: Account was successfully updated. |
144 | 144 |
notice_account_invalid_creditentials: Invalid user or password |
145 |
notice_account_authentication_timeout: Connection to authentication server timed out |
|
145 | 146 |
notice_account_password_updated: Password was successfully updated. |
146 | 147 |
notice_account_wrong_password: Wrong password |
147 | 148 |
notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you. |
... | ... | |
323 | 324 |
field_repository_is_default: Main repository |
324 | 325 |
field_multiple: Multiple values |
325 | 326 |
field_ldap_filter: LDAP filter |
327 |
field_ldap_timeout: "Timeout (in seconds)" |
|
326 | 328 | |
327 | 329 |
setting_app_title: Application title |
328 | 330 |
setting_app_subtitle: Application subtitle |
app/models/auth_source_ldap.rb (working copy) | ||
---|---|---|
18 | 18 |
require 'iconv' |
19 | 19 |
require 'net/ldap' |
20 | 20 |
require 'net/ldap/dn' |
21 |
require 'timeout' |
|
21 | 22 | |
22 | 23 |
class AuthSourceLdap < AuthSource |
23 | 24 |
validates_presence_of :host, :port, :attr_login |
... | ... | |
25 | 26 |
validates_length_of :account, :account_password, :base_dn, :filter, :maximum => 255, :allow_blank => true |
26 | 27 |
validates_length_of :attr_login, :attr_firstname, :attr_lastname, :attr_mail, :maximum => 30, :allow_nil => true |
27 | 28 |
validates_numericality_of :port, :only_integer => true |
29 |
validates_numericality_of :timeout, :only_integer => true, :allow_blank => true |
|
28 | 30 |
validate :validate_filter |
29 | 31 | |
30 | 32 |
before_validation :strip_ldap_attributes |
... | ... | |
44 | 46 | |
45 | 47 |
def authenticate(login, password) |
46 | 48 |
return nil if login.blank? || password.blank? |
47 |
attrs = get_user_dn(login, password) |
|
48 | 49 | |
50 |
begin |
|
51 |
self.timeout = 20 if self.timeout.nil? |
|
52 |
logger.error "LDAP Authentication timeout is set to '#{self.timeout}'" |
|
53 |
Timeout::timeout(self.timeout) do |
|
54 |
attrs = get_user_dn(login, password) |
|
55 |
end |
|
56 |
rescue Timeout::Error => e |
|
57 |
raise Timeout::Error.new(e.message) |
|
58 |
end |
|
59 | ||
49 | 60 |
if attrs && attrs[:dn] && authenticate_dn(attrs[:dn], password) |
50 | 61 |
logger.debug "Authentication successful for '#{login}'" if logger && logger.debug? |
51 | 62 |
return attrs.except(:dn) |
app/controllers/account_controller.rb (working copy) | ||
---|---|---|
150 | 150 |
# Valid user |
151 | 151 |
successful_authentication(user) |
152 | 152 |
end |
153 |
rescue Timeout::Error => e |
|
154 |
auth_source_timeout |
|
153 | 155 |
end |
154 | 156 | |
155 | 157 |
def open_id_authenticate(openid_url) |
... | ... | |
229 | 231 |
flash.now[:error] = l(:notice_account_invalid_creditentials) |
230 | 232 |
end |
231 | 233 | |
234 |
def auth_source_timeout |
|
235 |
logger.warn "Failed to authenticate user '#{params[:username]}' at #{Time.now.utc} because the authentication source connection timed out" |
|
236 |
flash.now[:error] = l(:notice_account_authentication_timeout) |
|
237 |
end |
|
238 | ||
232 | 239 |
# Register a user for email activation. |
233 | 240 |
# |
234 | 241 |
# Pass a block for behavior when a user fails to save |
app/views/auth_sources/_form_auth_source_ldap.html.erb (working copy) | ||
---|---|---|
26 | 26 |
<p><label for="auth_source_custom_filter"><%=l(:field_ldap_filter)%></label> |
27 | 27 |
<%= text_field 'auth_source', 'filter', :size => 60 %></p> |
28 | 28 | |
29 |
<p><label for="auth_source_timeout"><%=l(:field_ldap_timeout)%></label> |
|
30 |
<%= text_field 'auth_source', 'timeout', :size => 4 %></p> |
|
31 | ||
29 | 32 |
<p><label for="auth_source_onthefly_register"><%=l(:field_onthefly)%></label> |
30 | 33 |
<%= check_box 'auth_source', 'onthefly_register' %></p> |
31 | 34 |
</div> |
- « Previous
- 1
- 2
- Next »