Martin Kosek wrote:
On 08/24/2012 07:54 PM, Rob Crittenden wrote:
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
1) Patch needs a rebase
2) There are 2 test cases where new default mail attribute was not added:
======================================================================
FAIL: test_user[34]: user_find: Search for "tuser2" with manager "tuser1"
----------------------------------------------------------------------
...
extra keys = ['mail']
...
======================================================================
FAIL: test_user[75]: user_add: Create 2nd admin user "admin2"
----------------------------------------------------------------------
...
extra keys = ['mail']
...
3) Some code could be simplified:
This:
+ if 'ipadefaultemaildomain' in config:
+ defaultdomain = config['ipadefaultemaildomain'][0]
+ else:
+ defaultdomain = None
To this:
defaultdomain = config.get('ipadefaultemaildomain', [None])[0]
This:
if m.find('@') == -1 ...
To this:
if '@' not in m ...
IMHO, it is more readable than the find method.
3) When default e-mail domain is removed from config, users cannot be added any
more when e-mail is not explicitly specified:
# ipa config-mod --emaildomain=
Maximum username length: 32
Home directory base: /home
Default shell: /bin/sh
Default users group: ipausers
Search time limit: 2
Search size limit: 100
User search fields: uid,givenname,sn,telephonenumber,ou,title
Group search fields: cn,description
Enable migration mode: FALSE
Certificate Subject base: O=IDM.LAB.BOS.REDHAT.COM
Password Expiration Notification (days): 4
Password plugin features: AllowNThash
SELinux user map order:
guest_u:s0$xguest_u:s0$user_u:s0-s0:c0.c1023$staff_u:s0-s0:c0.c1023$unconfined_u:s0-s0:c0.c1023
Default SELinux user: guest_u:s0
PAC type: MS-PAC
# ipa user-add --first=Foo --last=Bar fbar
ipa: ERROR: invalid 'email': invalid e-mail format: fbar
Martin
Rebased, issues addressed.
rob
>From f396af6e3851673744e27e0ba7c4bba59b809c07 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 | 26 +++++++++++++++++++------
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 | 25 +++++++++++++++++++++++-
9 files changed, 57 insertions(+), 7 deletions(-)
diff --git a/ipalib/plugins/user.py b/ipalib/plugins/user.py
index bf25bc3c3155fc931050a0e2e5ba8a1603a39d98..3f0050917f96577ca5b21e7d6ba24ed39ad1bd2d 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)
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 b448294137d664ca7beca6552db612808fef1f61..aa2d0cac92f0944653be87be5df1fbe96470b3bc 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 f146b34bc6b88b5fa3aa1a0af2ac8234d0c0ed66..d374e02f00454e1c036b6295429b5ace4a9369d7 100644
--- a/tests/test_xmlrpc/test_user_plugin.py
+++ b/tests/test_xmlrpc/test_user_plugin.py
@@ -2,7 +2,6 @@
# Rob Crittenden <rcrit...@redhat.com>
# Pavel Zuna <pz...@redhat.com>
# Jason Gerard DeRose <jder...@redhat.com>
-# John Dennis <jden...@redhat.com>
#
# Copyright (C) 2008, 2009 Red Hat
# see file 'COPYING' for use and warranty information
@@ -117,6 +116,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),
@@ -157,6 +157,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,
@@ -199,6 +200,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',
@@ -244,6 +246,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',
@@ -284,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 +431,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,
@@ -461,6 +466,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,
@@ -485,6 +491,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,
@@ -515,6 +522,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,
@@ -575,6 +583,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),
@@ -611,6 +620,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),
@@ -647,6 +657,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,
@@ -676,6 +687,7 @@ class test_user(Declarative):
has_password=False,
uidnumber=[fuzzy_digits],
gidnumber=[fuzzy_digits],
+ mail=[u'%s@%s' % (user2, api.env.domain)],
manager=[user1],
),
],
@@ -825,6 +837,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'],
@@ -874,6 +887,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),
@@ -922,6 +936,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),
@@ -950,6 +965,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,
@@ -992,6 +1008,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),
@@ -1064,6 +1081,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),
@@ -1126,6 +1144,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)],
@@ -1186,6 +1205,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),
@@ -1238,6 +1258,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),
@@ -1273,6 +1294,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),
@@ -1330,6 +1352,7 @@ class test_user(Declarative):
displayname=[u'Second Admin'],
cn=[u'Second Admin'],
initials=[u'SA'],
+ mail=[u'%s@%s' % (admin2, api.env.domain)],
ipauniqueid=[fuzzy_uuid],
krbpwdpolicyreference=[DN(('cn','global_policy'),('cn',api.env.realm),
('cn','kerberos'),api.env.basedn)],
--
1.7.11.4
_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel