We weren't automatically creating the mail attribute despite having the
default e-mail domain. This patch will add it to all new users.
To disable creating this set the default e-mail domain to empty in ipa
config.
rob
>From 2b4fcb79bae22cd2cdd685178017290df9c99ca7 Mon Sep 17 00:00:00 2001
From: Rob Crittenden <rcrit...@redhat.com>
Date: Mon, 23 Jul 2012 14:00:51 -0400
Subject: [PATCH] Set the e-mail attribute using the default domain name by
default.
https://fedorahosted.org/freeipa/ticket/2810
---
ipalib/plugins/user.py | 25 +++++++++++++-----
tests/test_xmlrpc/test_attr.py | 1 +
tests/test_xmlrpc/test_automember_plugin.py | 2 ++
tests/test_xmlrpc/test_group_plugin.py | 2 ++
tests/test_xmlrpc/test_krbtpolicy.py | 1 +
tests/test_xmlrpc/test_nesting.py | 4 +++
tests/test_xmlrpc/test_netgroup_plugin.py | 2 ++
tests/test_xmlrpc/test_selinuxusermap_plugin.py | 1 +
tests/test_xmlrpc/test_user_plugin.py | 31 +++++++++++++++++++++++
9 files changed, 63 insertions(+), 6 deletions(-)
diff --git a/ipalib/plugins/user.py b/ipalib/plugins/user.py
index 529699f9a633fd9b9cc889de4a096d0c282ebb03..402c7e36c37d59bb003c9189c748a725bec576ab 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']:
@@ -350,19 +351,29 @@ 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:
+ if 'ipadefaultemaildomain' in config:
+ defaultdomain = config['ipadefaultemaildomain'][0]
+ else:
+ defaultdomain = None
+ 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 m.find('@') == -1 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
@@ -492,7 +503,9 @@ 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:
+ 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'])
@@ -580,7 +593,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)
diff --git a/tests/test_xmlrpc/test_attr.py b/tests/test_xmlrpc/test_attr.py
index 799c779391a017a61d9f1215d2fe109ec905a7d0..f5353e1b217fec96e18353923a11b509224a9083 100644
--- a/tests/test_xmlrpc/test_attr.py
+++ b/tests/test_xmlrpc/test_attr.py
@@ -56,6 +56,7 @@ class test_attr(Declarative):
uid=[user1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
displayname=[u'Test User1'],
cn=[u'Test User1'],
initials=[u'TU'],
diff --git a/tests/test_xmlrpc/test_automember_plugin.py b/tests/test_xmlrpc/test_automember_plugin.py
index 36a510939e3bcc449aadc1749fe80280474ca835..fcd9facb4184b87d4fd5ff1be5b8fdb92c1d9eeb 100644
--- a/tests/test_xmlrpc/test_automember_plugin.py
+++ b/tests/test_xmlrpc/test_automember_plugin.py
@@ -807,6 +807,7 @@ class test_automember(Declarative):
uid=[manager1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (manager1, api.env.domain)],
displayname=[u'Michael Scott'],
cn=[u'Michael Scott'],
initials=[u'MS'],
@@ -844,6 +845,7 @@ class test_automember(Declarative):
uid=[user1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
manager=[DN(('uid', 'mscott'), ('cn', 'users'), ('cn', 'accounts'), api.env.basedn)],
displayname=[u'Test User1'],
cn=[u'Test User1'],
diff --git a/tests/test_xmlrpc/test_group_plugin.py b/tests/test_xmlrpc/test_group_plugin.py
index de4635d3caa3f0e66fbd51f2e7c93d654f49608b..77a419b0c86c08cd8f16f452215706ae577a056a 100644
--- a/tests/test_xmlrpc/test_group_plugin.py
+++ b/tests/test_xmlrpc/test_group_plugin.py
@@ -688,6 +688,7 @@ class test_group(Declarative):
uid=[user1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
displayname=[u'Test User1'],
cn=[u'Test User1'],
initials=[u'TU'],
@@ -804,6 +805,7 @@ class test_group(Declarative):
uid=[user1],
uidnumber=[fuzzy_digits],
gidnumber=[u'1000'],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
displayname=[u'Test User1'],
cn=[u'Test User1'],
initials=[u'TU'],
diff --git a/tests/test_xmlrpc/test_krbtpolicy.py b/tests/test_xmlrpc/test_krbtpolicy.py
index fc2bf54cfff9736e6b8e7873ab3583ecd57d4a9d..c61e754d263f4565a96386fe16f93ed6dc2daab4 100644
--- a/tests/test_xmlrpc/test_krbtpolicy.py
+++ b/tests/test_xmlrpc/test_krbtpolicy.py
@@ -105,6 +105,7 @@ class test_krbtpolicy(Declarative):
uid=[user1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
displayname=[u'Test User1'],
cn=[u'Test User1'],
initials=[u'TU'],
diff --git a/tests/test_xmlrpc/test_nesting.py b/tests/test_xmlrpc/test_nesting.py
index c28b7096b9f5a77ba853f71cb910ec589f9e247e..6af9c9d23d0f5732bf00dbb3413856b6467f24ca 100644
--- a/tests/test_xmlrpc/test_nesting.py
+++ b/tests/test_xmlrpc/test_nesting.py
@@ -171,6 +171,7 @@ class test_nesting(Declarative):
uid=[user1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
displayname=[u'Test User1'],
cn=[u'Test User1'],
initials=[u'TU'],
@@ -208,6 +209,7 @@ class test_nesting(Declarative):
uid=[user2],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user2, api.env.domain)],
displayname=[u'Test User2'],
cn=[u'Test User2'],
initials=[u'TU'],
@@ -245,6 +247,7 @@ class test_nesting(Declarative):
uid=[user3],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user3, api.env.domain)],
displayname=[u'Test User3'],
cn=[u'Test User3'],
initials=[u'TU'],
@@ -282,6 +285,7 @@ class test_nesting(Declarative):
uid=[user4],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user4, api.env.domain)],
displayname=[u'Test User4'],
cn=[u'Test User4'],
initials=[u'TU'],
diff --git a/tests/test_xmlrpc/test_netgroup_plugin.py b/tests/test_xmlrpc/test_netgroup_plugin.py
index b54291a646ebd613c1249101dc22528912e413ae..7a0dc5fada6b5c1174b2a90321cffd362242ec96 100644
--- a/tests/test_xmlrpc/test_netgroup_plugin.py
+++ b/tests/test_xmlrpc/test_netgroup_plugin.py
@@ -282,6 +282,7 @@ class test_netgroup(Declarative):
uid=[user1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
displayname=[u'Test User1'],
cn=[u'Test User1'],
initials=[u'TU'],
@@ -318,6 +319,7 @@ class test_netgroup(Declarative):
uid=[user2],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user2, api.env.domain)],
displayname=[u'Test User2'],
cn=[u'Test User2'],
initials=[u'TU'],
diff --git a/tests/test_xmlrpc/test_selinuxusermap_plugin.py b/tests/test_xmlrpc/test_selinuxusermap_plugin.py
index 06ad751ac378a58ed0d5fbf5559a66f4bf2f43e2..83260e8ab982da59343d84eba63c21e135ce61d4 100644
--- a/tests/test_xmlrpc/test_selinuxusermap_plugin.py
+++ b/tests/test_xmlrpc/test_selinuxusermap_plugin.py
@@ -201,6 +201,7 @@ class test_selinuxusermap(Declarative):
uid=[user1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
displayname=[u'Test User1'],
cn=[u'Test User1'],
initials=[u'TU'],
diff --git a/tests/test_xmlrpc/test_user_plugin.py b/tests/test_xmlrpc/test_user_plugin.py
index 4a4c69c19635771647f843371d18a5f79d960d5a..469118c6a4905de80af9b0b84921bc1ee2f63b01 100644
--- a/tests/test_xmlrpc/test_user_plugin.py
+++ b/tests/test_xmlrpc/test_user_plugin.py
@@ -107,6 +107,7 @@ class test_user(Declarative):
gidnumber=[fuzzy_digits],
displayname=[u'Test User1'],
cn=[u'Test User1'],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
initials=[u'TU'],
ipauniqueid=[fuzzy_uuid],
krbpwdpolicyreference=[DN(('cn','global_policy'),('cn',api.env.realm),
@@ -150,6 +151,7 @@ class test_user(Declarative):
uid=[user1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
memberof_group=[u'ipausers'],
nsaccountlock=False,
has_keytab=False,
@@ -194,6 +196,7 @@ class test_user(Declarative):
'displayname': [u'Test User1'],
'cn': [u'Test User1'],
'initials': [u'TU'],
+ 'mail': [u'%s@%s' % (user1, api.env.domain)],
},
],
summary=u'1 user matched',
@@ -241,6 +244,7 @@ class test_user(Declarative):
has_password=False,
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
),
],
summary=u'1 user matched',
@@ -283,6 +287,7 @@ class test_user(Declarative):
has_password=False,
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
),
],
summary=u'2 users matched',
@@ -427,6 +432,7 @@ class test_user(Declarative):
uid=[user1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
memberof_group=[u'ipausers'],
nsaccountlock=False,
has_keytab=False,
@@ -462,6 +468,7 @@ class test_user(Declarative):
uid=[user1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
memberof_group=[u'ipausers'],
nsaccountlock=False,
has_keytab=False,
@@ -486,6 +493,7 @@ class test_user(Declarative):
uid=[renameduser1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
memberof_group=[u'ipausers'],
nsaccountlock=False,
has_keytab=False,
@@ -516,6 +524,7 @@ class test_user(Declarative):
uid=[user1],
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
memberof_group=[u'ipausers'],
nsaccountlock=False,
has_keytab=False,
@@ -576,6 +585,7 @@ class test_user(Declarative):
gidnumber=[fuzzy_digits],
displayname=[u'Test User1'],
cn=[u'Test User1'],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
initials=[u'TU'],
ipauniqueid=[fuzzy_uuid],
krbpwdpolicyreference=[DN(('cn','global_policy'),('cn',api.env.realm),
@@ -614,6 +624,7 @@ class test_user(Declarative):
gidnumber=[fuzzy_digits],
displayname=[u'Test User2'],
cn=[u'Test User2'],
+ mail=[u'%s@%s' % (user2, api.env.domain)],
initials=[u'TU'],
ipauniqueid=[fuzzy_uuid],
krbpwdpolicyreference=[DN(('cn','global_policy'),('cn',api.env.realm),
@@ -652,6 +663,7 @@ class test_user(Declarative):
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
memberof_group=[u'ipausers'],
+ mail=[u'%s@%s' % (user2, api.env.domain)],
nsaccountlock=False,
has_keytab=False,
has_password=False,
@@ -804,6 +816,7 @@ class test_user(Declarative):
displayname=[u'Test User1'],
cn=[u'Test User1'],
initials=[u'TU'],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
street=[u'123 Maple Rd'],
l=[u'Anytown'],
st=[u'MD'],
@@ -855,6 +868,7 @@ class test_user(Declarative):
gidnumber=[fuzzy_digits],
displayname=[u'Test User1'],
cn=[u'Test User1'],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
initials=[u'TU'],
ipauniqueid=[fuzzy_uuid],
krbpwdpolicyreference=[DN(('cn','global_policy'),('cn',api.env.realm),
@@ -905,6 +919,7 @@ class test_user(Declarative):
gidnumber=[fuzzy_digits],
displayname=[u'Test User2'],
cn=[u'Test User2'],
+ mail=[u'%s@%s' % (user2, api.env.domain)],
initials=[u'TU'],
ipauniqueid=[fuzzy_uuid],
krbpwdpolicyreference=[DN(('cn','global_policy'),('cn',api.env.realm),
@@ -935,6 +950,7 @@ class test_user(Declarative):
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
memberof_group=[u'ipausers'],
+ mail=[u'%s@%s' % (user2, api.env.domain)],
nsaccountlock=False,
has_keytab=True,
has_password=True,
@@ -977,6 +993,7 @@ class test_user(Declarative):
gidnumber=[fuzzy_digits],
displayname=[u'Test User1'],
cn=[u'Test User1'],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
initials=[u'TU'],
ipauniqueid=[fuzzy_uuid],
krbpwdpolicyreference=[DN(('cn','global_policy'),('cn',api.env.realm),
@@ -1051,6 +1068,7 @@ class test_user(Declarative):
gidnumber=[fuzzy_digits],
displayname=[u'Test User1'],
cn=[u'Test User1'],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
initials=[u'TU'],
ipauniqueid=[fuzzy_uuid],
krbpwdpolicyreference=[DN(('cn','global_policy'),('cn',api.env.realm),
@@ -1115,6 +1133,7 @@ class test_user(Declarative):
displayname=[u'Test User1'],
cn=[u'Test User1'],
initials=[u'TU'],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
ipauniqueid=[fuzzy_uuid],
krbpwdpolicyreference=[DN(('cn','global_policy'),('cn',api.env.realm),
('cn','kerberos'),api.env.basedn)],
@@ -1177,6 +1196,7 @@ class test_user(Declarative):
gidnumber=[u'1000'],
displayname=[u'Test User2'],
cn=[u'Test User2'],
+ mail=[u'%s@%s' % (user2, api.env.domain)],
initials=[u'TU'],
ipauniqueid=[fuzzy_uuid],
krbpwdpolicyreference=[DN(('cn','global_policy'),('cn',api.env.realm),
@@ -1230,6 +1250,7 @@ class test_user(Declarative):
gidnumber=[fuzzy_digits],
displayname=[u'Test User1'],
cn=[u'Test User1'],
+ mail=[u'%s@%s' % (user1, api.env.domain)],
initials=[u'TU'],
ipauniqueid=[fuzzy_uuid],
krbpwdpolicyreference=[DN(('cn','global_policy'),('cn',api.env.realm),
@@ -1266,6 +1287,7 @@ class test_user(Declarative):
gidnumber=[u'1000'],
displayname=[u'Test User2'],
cn=[u'Test User2'],
+ mail=[u'%s@%s' % (user2, api.env.domain)],
initials=[u'TU'],
ipauniqueid=[fuzzy_uuid],
krbpwdpolicyreference=[DN(('cn','global_policy'),('cn',api.env.realm),
@@ -1326,4 +1348,13 @@ class test_user(Declarative):
),
),
+
+ dict(
+ desc='Add user with bad e-mail',
+ command=(
+ 'user_add', [user1], dict(givenname=u'Test', sn=u'User1', mail=u'bad@email')
+ ),
+ expected=errors.ValidationError(name='email', error=u'invalid e-mail format: bad@email')
+ ),
+
]
--
1.7.10.4
_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel