[enh] introduce mailAlias structural LDAP objectclass for storing aliases, instead of inetOrgPerson

This commit is contained in:
Julien Malik 2016-09-12 16:31:54 +02:00
parent 27edfb00da
commit e19e7c5710
3 changed files with 16 additions and 10 deletions

View file

@ -86,3 +86,10 @@ objectclass ( 1.3.6.1.4.1.40328.1.1.2.3
DESC 'Mail Group' DESC 'Mail Group'
MUST ( mail ) MUST ( mail )
) )
# Mail Alias Objectclass
objectclass ( 1.3.6.1.4.1.40328.1.2.4.4
NAME 'mailAlias'
SUP top
STRUCTURAL
)

View file

@ -239,9 +239,9 @@
"yunohost_installing": "Installing YunoHost...", "yunohost_installing": "Installing YunoHost...",
"yunohost_not_installed": "YunoHost is not or not correctly installed. Please execute 'yunohost tools postinstall'.", "yunohost_not_installed": "YunoHost is not or not correctly installed. Please execute 'yunohost tools postinstall'.",
"ask_alias_name" : "Alias name", "ask_alias_name" : "Alias name",
"ask_alias_mailforward" : "List of email to forward", "ask_alias_mailforward" : "List of email addresses to forward to",
"pattern_listemail" : "Must be a valid email address list delimited by commas", "pattern_listemail" : "Must be a valid email address list delimited by commas",
"pattern_name" : "Must be a valid name", "alias_init" : "Initializing aliases in LDAP",
"alias_created" : "Alias successfully created", "alias_created" : "Alias successfully created",
"alias_creation_failed" : "Unable to create alias", "alias_creation_failed" : "Unable to create alias",
"alias_deletion_failed" : "Unable to delete alias", "alias_deletion_failed" : "Unable to delete alias",

View file

@ -62,7 +62,7 @@ def alias_list(auth, fields=None, filter=None, limit=None, offset=None):
if limit is None: if limit is None:
limit = 1000 limit = 1000
if filter is None: if filter is None:
filter = '(&(objectclass=mailAccount)(!(uid=root))(!(uid=nobody)))' filter = '(&(objectclass=mailAccount)(objectclass=mailAlias))'
if fields: if fields:
keys = alias_attrs.keys() keys = alias_attrs.keys()
for attr in fields: for attr in fields:
@ -101,7 +101,6 @@ def alias_create(auth, alias, mailforward):
# Validate uniqueness of alias and mail in LDAP # Validate uniqueness of alias and mail in LDAP
auth.validate_uniqueness({ auth.validate_uniqueness({
'uid' : alias,
'mail' : alias 'mail' : alias
}) })
@ -112,10 +111,9 @@ def alias_create(auth, alias, mailforward):
alias[alias.find('@')+1:])) alias[alias.find('@')+1:]))
# Adapt values for LDAP # Adapt values for LDAP
rdn = 'uid=%s,ou=aliases' % alias rdn = 'mail=%s,ou=aliases' % alias
attr_dict = { attr_dict = {
'objectClass' : ['mailAccount'], 'objectClass' : ['mailAccount', 'mailAlias'],
'uid' : alias,
'mail' : alias 'mail' : alias
} }
@ -137,7 +135,7 @@ def alias_delete(auth, alias):
""" """
if auth.remove('uid=%s,ou=aliases' % alias): if auth.remove('mail=%s,ou=aliases' % alias):
pass pass
else: else:
raise MoulinetteError(169, m18n.n('alias_deletion_failed')) raise MoulinetteError(169, m18n.n('alias_deletion_failed'))
@ -154,13 +152,14 @@ def alias_info(auth, alias):
""" """
alias_attrs = [ alias_attrs = [
'mail', 'uid', 'maildrop' 'mail', 'maildrop'
] ]
if len(alias.split('@')) is 2: if len(alias.split('@')) is 2:
filter = 'mail=' + alias filter = 'mail=' + alias
else: else:
filter = 'uid=' + alias # TODO better exception
raise MoulinetteError(167, m18n.n('alias_info_failed'))
result = auth.search('ou=aliases,dc=yunohost,dc=org', filter, alias_attrs) result = auth.search('ou=aliases,dc=yunohost,dc=org', filter, alias_attrs)