Commit 2028c64e authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'ldap_logging' into 'master'

LDAP key logging

See merge request !125
parents 9aa67914 41a3c84e
...@@ -27,6 +27,8 @@ class Key < ActiveRecord::Base ...@@ -27,6 +27,8 @@ class Key < ActiveRecord::Base
validates :key, presence: true, length: { within: 0..5000 }, format: { with: /\A(ssh|ecdsa)-.*\Z/ }, uniqueness: true validates :key, presence: true, length: { within: 0..5000 }, format: { with: /\A(ssh|ecdsa)-.*\Z/ }, uniqueness: true
validates :fingerprint, uniqueness: true, presence: { message: 'cannot be generated' } validates :fingerprint, uniqueness: true, presence: { message: 'cannot be generated' }
scope :ldap, -> { where(type: 'LDAPKey') }
delegate :name, :email, to: :user, prefix: true delegate :name, :email, to: :user, prefix: true
after_create :add_to_shell after_create :add_to_shell
......
...@@ -62,21 +62,20 @@ module Gitlab ...@@ -62,21 +62,20 @@ module Gitlab
# Get LDAP user entry # Get LDAP user entry
ldap_user = Gitlab::LDAP::Person.find_by_dn(user.extern_uid) ldap_user = Gitlab::LDAP::Person.find_by_dn(user.extern_uid)
if ldap_user.entry.respond_to?(Gitlab.config.ldap['sync_ssh_keys'].to_sym) user.keys.ldap.where.not(key: ldap_user.ssh_keys).each do |deleted_key|
sshkeys = ldap_user.entry[Gitlab.config.ldap['sync_ssh_keys'].to_sym] Rails.logger.info "#{self.class.name}: removing LDAP SSH key #{deleted_key.key} from #{user.name} (#{user.id})"
else unless deleted_key.destroy
sshkeys = [] Rails.logger.error "#{self.class.name}: failed to remove LDAP SSH key #{key.inspect} from #{user.name} (#{user.id})"
end
sshkeys.each do |key|
unless user.keys.find_by_key(key)
k = LDAPKey.new(title: "LDAP - #{Gitlab.config.ldap['sync_ssh_keys']}", key: key)
user.keys << k if k.save
end end
end end
user.keys.to_a.each do |k|
if k.is_a?(LDAPKey) && !sshkeys.include?(k.key) (ldap_user.ssh_keys - user.keys.ldap.pluck(:key)).each do |key|
user.keys.delete(k) Rails.logger.info "#{self.class.name}: adding LDAP SSH key #{key.inspect} to #{user.name} (#{user.id})"
k.destroy new_key = LDAPKey.new(title: "LDAP - #{Gitlab.config.ldap['sync_ssh_keys']}", key: key)
new_key.user = user
unless new_key.save
Rails.logger.error "#{self.class.name}: failed to add LDAP SSH key #{key.inspect} to #{user.name} (#{user.id})\n"\
"error messages: #{new_key.errors.messages}"
end end
end end
end end
......
...@@ -46,12 +46,21 @@ module Gitlab ...@@ -46,12 +46,21 @@ module Gitlab
entry.dn entry.dn
end end
def entry def ssh_keys
@entry ssh_keys_attribute = Gitlab.config.ldap['sync_ssh_keys'].to_sym
if entry.respond_to?(ssh_keys_attribute)
entry[ssh_keys_attribute]
else
[]
end
end end
private private
def entry
@entry
end
def adapter def adapter
@adapter ||= Gitlab::LDAP::Adapter.new @adapter ||= Gitlab::LDAP::Adapter.new
end end
......
...@@ -88,6 +88,7 @@ describe Gitlab::LDAP::Access do ...@@ -88,6 +88,7 @@ describe Gitlab::LDAP::Access do
expect(user_ldap.keys.size).to be(0) expect(user_ldap.keys.size).to be(0)
access.update_ssh_keys(user_ldap) access.update_ssh_keys(user_ldap)
user_ldap.reload
expect(user_ldap.keys.size).to be(1) expect(user_ldap.keys.size).to be(1)
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment