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

Reply via email to