Project

General

Profile

« Previous | Next » 

Revision f706cc1d

Added by Marc Dequènes over 14 years ago

  • ID f706cc1dcc9263550db2ca8219d705c9015ee535

[evol] fix and improve before hooks for aspects

View differences:

conf/ldap_shadows/shadows/MilkyPond/hooks/aspects/fs.rb
STEP_UID = 100
DEFAULT_GROUP = 'dc-users'
def self.hook_modify(mapper, item)
def self.hook_before_create(mapper, item)
hook_common(mapper, item)
end
def self.hook_before_modify(mapper, item)
hook_common(mapper, item)
end
def self.hook_common(mapper, item)
unless item.attribute_present?('gidNumber')
item.primaryGroup = mapper.find_klass(:group).find(:first, DEFAULT_GROUP)
end
unless item.attribute_present?('uidNumber')
groups = ActiveLdap::Base.search(:scope => :sub, :filter => "(uidNumber=*)", :attributes => ['uidNumber'])
uidnumbers = groups.collect {|group| group[1]['uidNumber'].first.to_i }
if item.attribute_present?('uidNumber')
user = ActiveLdap::Base.find(:first, :scope => :sub, :filter => "(&(objectClass=posixAccount)(uidNumber=#{item.uidNumber}))", :attributes => ['uidNumber'])
unless user.nil? or user.dn == item.dn
raise_error "UID already used by another item"
end
else
users = ActiveLdap::Base.find(:all, :scope => :sub, :filter => "(&(objectClass=posixAccount)(uidNumber=*))", :attributes => ['uidNumber'])
uidnumbers = users.collect {|user| user.uidNumber }
avail_uidnumber = nil
min_uidn = MIN_UID
......
end
if avail_uidnumber.nil?
STDERR.puts "Available UID range is depleted."
exit 4
raise_error "Available UID range is depleted."
else
item.uidNumber = avail_uidnumber
end

Also available in: Unified diff