Browse Source

change mail alias handling

now i have separated mailAlias into mailAliasRole and mailAliasPerson.
mailAliasRole holds mail aliases that are not assoziated to a concrete
person but to an organizational role
mailAliasPerson holds mail aliases for concrete people
master
Georg Hopp 15 years ago
committed by Georg Hopp
parent
commit
b488bbe921
  1. 18
      MailAliasPerson.rb
  2. 2
      MailAliasRole.rb
  3. 19
      SystemDataBackend.rb
  4. 43
      SystemDataBackendLdap.rb
  5. 15
      test_dummy.rb

18
MailAliasPerson.rb

@ -0,0 +1,18 @@
require 'SystemData'
class MailAliasPerson < SystemData
attr_accessor :mail, :maildrop, :surname, :name
def initialize(args = {})
super(args)
@mail = args[:mail]
@maildrop = args[:maildrop]
@surname = args[:surname]
@name = args[:name]
end
def site
@mail.sub(/.*@/, '')
end
end

2
MailAlias.rb → MailAliasRole.rb

@ -1,6 +1,6 @@
require 'SystemData' require 'SystemData'
class MailAlias < SystemData
class MailAliasRole < SystemData
attr_accessor :mail, :maildrop, :user attr_accessor :mail, :maildrop, :user
def initialize(args = {}) def initialize(args = {})

19
SystemDataBackend.rb

@ -1,7 +1,8 @@
require 'User' require 'User'
require 'Group' require 'Group'
require 'Site' require 'Site'
require 'MailAlias'
require 'MailAliasRole'
require 'MailAliasPerson'
require 'MailAccount' require 'MailAccount'
class SystemDataBackend class SystemDataBackend
@ -23,8 +24,12 @@ class SystemDataBackend
load(:Site) load(:Site)
end end
def mailAliases
load(:MailAlias)
def mailAliasRoles
load(:MailAliasRole)
end
def mailAliasPeople
load(:MailAliasPerson)
end end
def mailAccounts def mailAccounts
@ -54,8 +59,12 @@ class SystemDataBackend
end end
end end
def mailAliasesBySite(site)
mailAliases.find_all{|mail| mail.site == site.name}
def mailAliasRolesBySite(site)
mailAliasRoles.find_all{|mail| mail.site == site.name}
end
def mailAliasPeopleBySite(site)
mailAliasPeople.find_all{|mail| mail.site == site.name}
end end
def mailAccountsBySite(site) def mailAccountsBySite(site)

43
SystemDataBackendLdap.rb

@ -18,27 +18,36 @@
:memberuid => :members :memberuid => :members
} }
LDAP_SITE_MAP = {:o => :name}
LDAP_MAILALIASPERSON_MAP = {
:sn => :surname,
:cn => :name
}
LDAP_MAP = { LDAP_MAP = {
:User => LDAP_USER_MAP,
:Group => LDAP_GROUP_MAP,
:Site => LDAP_SITE_MAP
:User => LDAP_USER_MAP,
:Group => LDAP_GROUP_MAP,
:Site => { :o => :name },
:MailAliasRole => { :cn => :user },
:MailAliasPerson => LDAP_MAILALIASPERSON_MAP,
:mailAccount => { :homedirectory => :home }
} }
LDAP_FILTER = { LDAP_FILTER = {
:User => Net::LDAP::Filter::eq('objectClass', 'posixAccount'),
:Group => Net::LDAP::Filter::eq('objectClass', 'posixGroup'),
:Site => Net::LDAP::Filter::eq('objectClass', 'organization') &
(~Net::LDAP::Filter::eq('o', 'hosting')),
:MailAlias => Net::LDAP::Filter::eq('objectClass', 'mailAlias'),
:MailAccount => Net::LDAP::Filter::eq('objectClass', 'mailAccount')
:User => '(objectClass=posixAccount)',
:Group => '(objectClass=posixGroup)',
:Site => '(&(objectClass=organization)(!(o=hosting)))',
:MailAliasRole => '(&(objectClass=MailAlias)(objectClass=organizationalrole))',
:MailAliasPerson => '(&(objectClass=MailAlias)(objectClass=person))',
:MailAccount => '(objectClass=mailAccount)'
} }
LDAP_OBJECTCLASS = { LDAP_OBJECTCLASS = {
:User => [ 'account', 'posixAccount', 'shadowAccount' ],
:Group => 'posixGroup',
:Site => 'organization'
:User => [ 'account', 'posixAccount', 'shadowAccount' ],
:Group => 'posixGroup',
:Site => 'organization',
:MailAliasRole => [ 'organizationalRole', 'MailAlias' ],
:MailAliasPerson => [ 'person', 'MailAlias' ],
:MailAccount => [ 'person', 'MailAccount' ]
} }
LDAP_LAMBDA_USER = lambda do |entry| LDAP_LAMBDA_USER = lambda do |entry|
@ -68,7 +77,7 @@
@ldapData[kind][:internal] = @ldap.search( @ldapData[kind][:internal] = @ldap.search(
:base => ldapBase(kind), :base => ldapBase(kind),
:filter => LDAP_FILTER[kind]
:filter => Net::LDAP::Filter::construct(LDAP_FILTER[kind])
) )
end end
@ -84,9 +93,9 @@
ydata.merge!({ map[key] || key => value.size==1?value[0]:value.to_a }) ydata.merge!({ map[key] || key => value.size==1?value[0]:value.to_a })
end end
ydata ydata
end if ! @ldapData[kind][:external]
end if ! @ldapData[kind][:external] && @ldapData[kind][:internal]
@ldapData[kind][:external].each{|ydata| yield ydata}
@ldapData[kind][:external].each{|ydata| yield ydata} if @ldapData[kind][:external]
end end
def update(kind, data) def update(kind, data)
@ -164,7 +173,7 @@
def ldapBase(kind) def ldapBase(kind)
case(kind) case(kind)
when :User, :Group: @systemDn when :User, :Group: @systemDn
when :Site, :MailAlias, :MailAccount: @hostingDn
when :Site, :MailAliasRole, :MailAliasPerson, :MailAccount: @hostingDn
end end
end end

15
test_dummy.rb

@ -26,15 +26,24 @@ end
backend.sites.each do |site| backend.sites.each do |site|
puts 'site: ' + site.name puts 'site: ' + site.name
puts ' MailAliases:'
backend.mailAliasesBySite(site).each{|account| puts ' ' + account.mail}
puts ' MailAliasRoles:'
backend.mailAliasRolesBySite(site).each{|account| puts ' ' + account.mail}
puts
puts ' MailAliasPeople:'
backend.mailAliasPeopleBySite(site).each{|account| puts ' ' + account.mail}
puts puts
puts ' MailAccounts:' puts ' MailAccounts:'
backend.mailAccountsBySite(site).each{|account| puts ' ' + account.mail} backend.mailAccountsBySite(site).each{|account| puts ' ' + account.mail}
puts puts
end end
backend.mailAliases.each do |mailAlias|
backend.mailAliasRoles.each do |mailAlias|
puts 'mailAlias: '+mailAlias.mail.inspect+','+mailAlias.maildrop.inspect
end
puts
backend.mailAliasPeople.each do |mailAlias|
puts 'mailAlias: '+mailAlias.mail.inspect+','+mailAlias.maildrop.inspect puts 'mailAlias: '+mailAlias.mail.inspect+','+mailAlias.maildrop.inspect
end end

Loading…
Cancel
Save