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'
class MailAlias < SystemData
class MailAliasRole < SystemData
attr_accessor :mail, :maildrop, :user
def initialize(args = {})

19
SystemDataBackend.rb

@ -1,7 +1,8 @@
require 'User'
require 'Group'
require 'Site'
require 'MailAlias'
require 'MailAliasRole'
require 'MailAliasPerson'
require 'MailAccount'
class SystemDataBackend
@ -23,8 +24,12 @@ class SystemDataBackend
load(:Site)
end
def mailAliases
load(:MailAlias)
def mailAliasRoles
load(:MailAliasRole)
end
def mailAliasPeople
load(:MailAliasPerson)
end
def mailAccounts
@ -54,8 +59,12 @@ class SystemDataBackend
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
def mailAccountsBySite(site)

43
SystemDataBackendLdap.rb

@ -18,27 +18,36 @@
:memberuid => :members
}
LDAP_SITE_MAP = {:o => :name}
LDAP_MAILALIASPERSON_MAP = {
:sn => :surname,
:cn => :name
}
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 = {
: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 = {
: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|
@ -68,7 +77,7 @@
@ldapData[kind][:internal] = @ldap.search(
:base => ldapBase(kind),
:filter => LDAP_FILTER[kind]
:filter => Net::LDAP::Filter::construct(LDAP_FILTER[kind])
)
end
@ -84,9 +93,9 @@
ydata.merge!({ map[key] || key => value.size==1?value[0]:value.to_a })
end
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
def update(kind, data)
@ -164,7 +173,7 @@
def ldapBase(kind)
case(kind)
when :User, :Group: @systemDn
when :Site, :MailAlias, :MailAccount: @hostingDn
when :Site, :MailAliasRole, :MailAliasPerson, :MailAccount: @hostingDn
end
end

15
test_dummy.rb

@ -26,15 +26,24 @@ end
backend.sites.each do |site|
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 ' MailAccounts:'
backend.mailAccountsBySite(site).each{|account| puts ' ' + account.mail}
puts
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
end

Loading…
Cancel
Save