Project

General

Profile

Actions

Bug #18887

open

"undefined method `each' for nil:NilClass" error during LDAP login and group search

Added by Johan Berg about 7 years ago. Updated over 6 years ago.

Status:
Ready For Testing
Priority:
Normal
Assignee:
-
Category:
Authentication
Target version:
-
Difficulty:
Triaged:
Fixed in Releases:
Found in Releases:

Description

Local users works just fine but LDAP users does not work.

Installed packages.

ii foreman 1.14.2-1 amd64 Systems management web interface
ii foreman-compute 1.14.2-1 all metapackage providing fog dependencies for Foreman,
ii foreman-debug 1.14.2-1 all provides support utility foreman-debug.
ii foreman-ec2 1.14.2-1 all metapackage providing EC2 dependencies for Foreman
ii foreman-libvirt 1.14.2-1 all metapackage providing libvirt dependencies for Foreman
ii foreman-postgresql 1.14.2-1 all metapackage providing PostgreSQL dependencies for Foreman
ii foreman-proxy 1.14.2-1 all RESTful proxies for DNS, DHCP, TFTP, and Puppet
ii foreman-sqlite3 1.14.2-1 all metapackage providing sqlite dependencies for Foreman
ii ruby-foreman-ansible 1.4.4-1 all Foreman Ansible plugin
ii ruby-foreman-deface 1.0.2-2 all Foreman Deface Plugin Dependency
ii ruby-foreman-discovery 8.0.1-1 all Foreman Discovery Plugin
ii ruby-foreman-docker 3.0.0-1 all Foreman Docker compute resource
ii ruby-foreman-salt 8.0.1-1 all Foreman Salt Plugin
ii ruby-foreman-tasks 0.8.6-1 all Tasks management engine for Foreman.
ii ruby-foreman-templates 4.0.1-1 all Foreman Templates Plugin

I run this on Ubuntu 16.04 LTS amd64.

I get the following error:

2017-03-14T10:29:03 d45e6a3f [app] [D] Setting current user thread-local variable to nil
2017-03-14T10:29:03 d45e6a3f [app] [D] Setting current user thread-local variable to foreman_admin
2017-03-14T10:29:03 d45e6a3f [app] [I] Expire fragment views/tabs_and_title_records-4 (0.2ms)
2017-03-14T10:29:03 d45e6a3f [app] [D] Setting current user thread-local variable to nil
2017-03-14T10:29:03 d45e6a3f [app] [W] Action failed | NoMethodError: undefined method `each' for nil:NilClass | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/ldap_fluff-0.4.6/lib/ldap_fluff/posix_member_service.rb:22:in `find_user_groups' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/ldap_fluff-0.4.6/lib/ldap_fluff/generic.rb:37:in `groups_for_uid' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/ldap_fluff-0.4.6/lib/ldap_fluff/ldap_fluff.rb:48:in `block in group_list' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/ldap_fluff-0.4.6/lib/ldap_fluff/ldap_fluff.rb:94:in `block in instrument' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications.rb:164:in `block in instrument' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications.rb:164:in `instrument' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/ldap_fluff-0.4.6/lib/ldap_fluff/ldap_fluff.rb:93:in `instrument' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/ldap_fluff-0.4.6/lib/ldap_fluff/ldap_fluff.rb:47:in `group_list' | /usr/share/foreman/app/models/auth_sources/auth_source_ldap.rb:122:in `update_usergroups' | /usr/share/foreman/app/models/user.rb:202:in `block in try_to_login' | /usr/share/foreman/app/models/concerns/foreman/thread_session.rb:72:in `as' | /usr/share/foreman/app/models/concerns/foreman/thread_session.rb:78:in `as_anonymous_admin' | /usr/share/foreman/app/models/user.rb:194:in `try_to_login' | /usr/share/foreman/app/controllers/users_controller.rb:73:in `login' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/implicit_render.rb:4:in `send_action' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/abstract_controller/base.rb:198:in `process_action' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/rendering.rb:10:in `process_action' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/abstract_controller/callbacks.rb:20:in `block in process_action' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:117:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:505:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:498:in `block (2 levels) in around' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rails-observers-0.1.2/lib/rails/observers/action_controller/caching/sweeping.rb:73:in `around' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:455:in `public_send' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:455:in `block in make_lambda' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:312:in `block in halting' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:497:in `block in around' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:505:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:498:in `block (2 levels) in around' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting' | /usr/share/foreman/app/controllers/concerns/application_shared.rb:14:in `set_timezone' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:432:in `block in make_lambda' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:312:in `block in halting' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:497:in `block in around' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:505:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:498:in `block (2 levels) in around' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting' | /usr/share/foreman/app/models/concerns/foreman/thread_session.rb:32:in `clear_thread' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:432:in `block in make_lambda' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:312:in `block in halting' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:497:in `block in around' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:505:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:498:in `block (2 levels) in around' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rails-observers-0.1.2/lib/rails/observers/action_controller/caching/sweeping.rb:73:in `around' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:455:in `public_send' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:455:in `block in make_lambda' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:312:in `block in halting' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:497:in `block in around' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:505:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:92:in `__run_callbacks__' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:81:in `run_callbacks' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/abstract_controller/callbacks.rb:19:in `process_action' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/rescue.rb:29:in `process_action' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications.rb:164:in `block in instrument' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications.rb:164:in `instrument' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/instrumentation.rb:30:in `process_action' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/params_wrapper.rb:250:in `process_action' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/railties/controller_runtime.rb:18:in `process_action' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/abstract_controller/base.rb:137:in `process' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionview-4.2.7.1/lib/action_view/rendering.rb:30:in `process' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal.rb:196:in `dispatch' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/rack_delegation.rb:13:in `dispatch' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal.rb:237:in `block in action' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/routing/route_set.rb:74:in `dispatch' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/routing/route_set.rb:43:in `serve' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/journey/router.rb:43:in `block in serve' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/journey/router.rb:30:in `each' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/journey/router.rb:30:in `serve' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/routing/route_set.rb:817:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/apipie-rails-0.3.7/lib/apipie/static_dispatcher.rb:65:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/apipie-rails-0.3.7/lib/apipie/extractor/recorder.rb:132:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/apipie-rails-0.3.7/lib/apipie/middleware/checksum_in_headers.rb:27:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rack-1.6.5/lib/rack/etag.rb:24:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rack-1.6.5/lib/rack/conditionalget.rb:38:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rack-1.6.5/lib/rack/head.rb:13:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/params_parser.rb:27:in `call' | /usr/share/foreman/lib/middleware/catch_json_parse_errors.rb:8:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/flash.rb:260:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rack-1.6.5/lib/rack/session/abstract/id.rb:225:in `context' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rack-1.6.5/lib/rack/session/abstract/id.rb:220:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/cookies.rb:560:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/query_cache.rb:36:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/callbacks.rb:29:in `block in call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:88:in `__run_callbacks__' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:778:in `_run_call_callbacks' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:81:in `run_callbacks' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/callbacks.rb:27:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/remote_ip.rb:78:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/rack/logger.rb:38:in `call_app' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/rack/logger.rb:22:in `call' | /usr/share/foreman/lib/middleware/tagged_logging.rb:18:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/request_id.rb:21:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rack-1.6.5/lib/rack/methodoverride.rb:22:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rack-1.6.5/lib/rack/runtime.rb:18:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/static.rb:120:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rack-1.6.5/lib/rack/sendfile.rb:113:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/secure_headers-3.6.1/lib/secure_headers/middleware.rb:12:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/engine.rb:518:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/application.rb:165:in `call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/railtie.rb:194:in `public_send' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/railtie.rb:194:in `method_missing' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rack-1.6.5/lib/rack/urlmap.rb:66:in `block in call' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rack-1.6.5/lib/rack/urlmap.rb:50:in `each' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/rack-1.6.5/lib/rack/urlmap.rb:50:in `call' | /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/thread_handler_extension.rb:97:in `process_request' | /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:160:in `accept_and_process_next_request' | /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:113:in `main_loop' | /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler.rb:416:in `block (3 levels) in start_threads' | /usr/lib/ruby/vendor_ruby/phusion_passenger/utils.rb:113:in `block in create_thread_and_abort_on_exception' | /usr/share/foreman/vendor/cache/ruby/2.3.0/gems/logging-2.1.0/lib/logging/diagnostic_context.rb:450:in `block in create_with_logging_context'
2017-03-14T10:29:03 d45e6a3f [app] [I] Rendered common/500.html.erb within layouts/application (4.6ms)
2017-03-14T10:29:03 d45e6a3f [app] [I] Rendered layouts/_application_content.html.erb (0.4ms)
2017-03-14T10:29:03 d45e6a3f [app] [I] Rendered layouts/base.html.erb (2.9ms)
2017-03-14T10:29:03 d45e6a3f [app] [I] Completed 500 Internal Server Error in 113ms (Views: 10.2ms | ActiveRecord: 7.3ms)
2017-03-14T10:29:03 03a66c9f [app] [I] Started GET "/javascripts/locale/en/app.js" for 10.140.102.1 at 2017-03-14 10:29:03 +0100
2017-03-14T10:29:03 03a66c9f [app] [F] | ActionController::RoutingError (No route matches [GET] "/javascripts/locale/en/app.js"): | lib/middleware/tagged_logging.rb:18:in `call'

Actions #1

Updated by Dominic Cleal about 7 years ago

  • Subject changed from Problems logging in via LDAP on 1.13.2 to 1.14.2 to "undefined method `each' for nil:NilClass" error during LDAP login and group search

This may be related to https://github.com/theforeman/ldap_fluff/commit/1b2fea9a90eefe11dc4c3c6e1e10e3caf4df6781, and probably occurs because there was an LDAP error when searching for groups beneath the group DN. Ensure the group base DN is set in the LDAP authentication source correctly.

You may be able to see details of the search or error by enabling LDAP debugging (https://theforeman.org/manuals/1.14/index.html#7.2Debugging).

Actions #2

Updated by Johan Berg about 7 years ago

Dominic Cleal wrote:

This may be related to https://github.com/theforeman/ldap_fluff/commit/1b2fea9a90eefe11dc4c3c6e1e10e3caf4df6781, and probably occurs because there was an LDAP error when searching for groups beneath the group DN. Ensure the group base DN is set in the LDAP authentication source correctly.

You may be able to see details of the search or error by enabling LDAP debugging (https://theforeman.org/manuals/1.14/index.html#7.2Debugging).

Thanks I will check that out and report back.

Actions #3

Updated by Ivan Necas over 6 years ago

I was able to reproduce this when the group base dn was not present on the ldap system.

Actions #4

Updated by Ivan Necas over 6 years ago

  • Status changed from New to Ready For Testing
  • Pull request https://github.com/theforeman/ldap_fluff/pull/58 added

The reproducer steps: set the group base dn to some non-existing base with Posix ldap provider.

Actions

Also available in: Atom PDF