diff options
author | Rob Crittenden <rcritten@redhat.com> | 2012-07-23 14:00:51 -0400 |
---|---|---|
committer | Martin Kosek <mkosek@redhat.com> | 2012-09-07 13:36:37 +0200 |
commit | e4e5bd0595f511703db95e194a15069d449bcdbd (patch) | |
tree | 6403da81ccf6639ebb72b00a7f376d585f85b895 /ipalib/plugins | |
parent | 26dfbe61dd399e9c34f6f5bdeb25a197f1f461cb (diff) | |
download | freeipa-e4e5bd0595f511703db95e194a15069d449bcdbd.tar.gz freeipa-e4e5bd0595f511703db95e194a15069d449bcdbd.tar.xz freeipa-e4e5bd0595f511703db95e194a15069d449bcdbd.zip |
Set the e-mail attribute using the default domain name by default
https://fedorahosted.org/freeipa/ticket/2810
Diffstat (limited to 'ipalib/plugins')
-rw-r--r-- | ipalib/plugins/user.py | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/ipalib/plugins/user.py b/ipalib/plugins/user.py index bf25bc3c3..3f0050917 100644 --- a/ipalib/plugins/user.py +++ b/ipalib/plugins/user.py @@ -28,6 +28,7 @@ from ipalib.request import context from ipalib import _, ngettext from ipalib import output from ipapython.ipautil import ipa_generate_password +from ipapython.ipavalidate import Email import posixpath from ipalib.util import validate_sshpubkey, output_sshpubkey if api.env.in_server and api.env.context in ['lite', 'server']: @@ -367,19 +368,26 @@ class user(LDAPObject): ), ) - def _normalize_email(self, email, config=None): + def _normalize_and_validate_email(self, email, config=None): if not config: config = self.backend.get_ipa_config()[1] # check if default email domain should be added - if email and 'ipadefaultemaildomain' in config: + defaultdomain = config.get('ipadefaultemaildomain', [None])[0] + if email: norm_email = [] if not isinstance(email, (list, tuple)): email = [email] for m in email: - if isinstance(m, basestring) and m.find('@') == -1: - norm_email.append(m + u'@' + config['ipadefaultemaildomain'][0]) + if isinstance(m, basestring): + if '@' not in m and defaultdomain: + m = m + u'@' + defaultdomain + if not Email(m): + raise errors.ValidationError(name='email', error=_('invalid e-mail format: %(email)s') % dict(email=m)) + norm_email.append(m) else: + if not Email(m): + raise errors.ValidationError(name='email', error=_('invalid e-mail format: %(email)s') % dict(email=m)) norm_email.append(m) return norm_email @@ -509,7 +517,13 @@ class user_add(LDAPCreate): setattr(context, 'randompassword', entry_attrs['userpassword']) if 'mail' in entry_attrs: - entry_attrs['mail'] = self.obj._normalize_email(entry_attrs['mail'], config) + entry_attrs['mail'] = self.obj._normalize_and_validate_email(entry_attrs['mail'], config) + else: + # No e-mail passed in. If we have a default e-mail domain set + # then we'll add it automatically. + defaultdomain = config.get('ipadefaultemaildomain', [None])[0] + if defaultdomain: + entry_attrs['mail'] = self.obj._normalize_and_validate_email(keys[-1], config) if 'manager' in entry_attrs: entry_attrs['manager'] = self.obj._normalize_manager(entry_attrs['manager']) @@ -593,7 +607,7 @@ class user_mod(LDAPUpdate): ) ) if 'mail' in entry_attrs: - entry_attrs['mail'] = self.obj._normalize_email(entry_attrs['mail']) + entry_attrs['mail'] = self.obj._normalize_and_validate_email(entry_attrs['mail']) if 'manager' in entry_attrs: entry_attrs['manager'] = self.obj._normalize_manager(entry_attrs['manager']) validate_nsaccountlock(entry_attrs) |