https://fedorahosted.org/freeipa/ticket/5344
Patch attached.
Test are failing, a fix in UserTracker has to be done (partially in my
patch 329)
From 48cc0be0a83a0a5e24b9753a94f3fee1a7e25bc3 Mon Sep 17 00:00:00 2001
From: Martin Basti <mba...@redhat.com>
Date: Fri, 16 Oct 2015 16:45:39 +0200
Subject: [PATCH] Allow multiple managers per user - CLI part
https://fedorahosted.org/freeipa/ticket/5344
---
API.txt | 12 +++++------
VERSION | 4 ++--
ipalib/plugins/baseuser.py | 7 +++++--
ipatests/test_xmlrpc/test_user_plugin.py | 35 ++++++++++++++++++++++++++++++++
4 files changed, 48 insertions(+), 10 deletions(-)
diff --git a/API.txt b/API.txt
index cf5446114a9ccffad8d87421b4cd75c92ff267ee..19e00516921c78531eb2101d2148bbe614581add 100644
--- a/API.txt
+++ b/API.txt
@@ -4225,7 +4225,7 @@ option: Str('krbprincipalname', attribute=True, autofill=True, cli_name='princip
option: Str('l', attribute=True, cli_name='city', multivalue=False, required=False)
option: Str('loginshell', attribute=True, cli_name='shell', multivalue=False, required=False)
option: Str('mail', attribute=True, cli_name='email', multivalue=True, required=False)
-option: Str('manager', attribute=True, cli_name='manager', multivalue=False, required=False)
+option: Str('manager', attribute=True, cli_name='manager', multivalue=True, required=False)
option: Str('mobile', attribute=True, cli_name='mobile', multivalue=True, required=False)
option: Flag('no_members', autofill=True, default=False, exclude='webui')
option: Str('ou', attribute=True, cli_name='orgunit', multivalue=False, required=False)
@@ -4285,7 +4285,7 @@ option: Str('krbprincipalname', attribute=True, autofill=False, cli_name='princi
option: Str('l', attribute=True, autofill=False, cli_name='city', multivalue=False, query=True, required=False)
option: Str('loginshell', attribute=True, autofill=False, cli_name='shell', multivalue=False, query=True, required=False)
option: Str('mail', attribute=True, autofill=False, cli_name='email', multivalue=True, query=True, required=False)
-option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=False, query=True, required=False)
+option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=True, query=True, required=False)
option: Str('mobile', attribute=True, autofill=False, cli_name='mobile', multivalue=True, query=True, required=False)
option: Flag('no_members', autofill=True, default=False, exclude='webui')
option: Str('not_in_group*', cli_name='not_in_groups', csv=True)
@@ -4342,7 +4342,7 @@ option: DateTime('krbprincipalexpiration', attribute=True, autofill=False, cli_n
option: Str('l', attribute=True, autofill=False, cli_name='city', multivalue=False, required=False)
option: Str('loginshell', attribute=True, autofill=False, cli_name='shell', multivalue=False, required=False)
option: Str('mail', attribute=True, autofill=False, cli_name='email', multivalue=True, required=False)
-option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=False, required=False)
+option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=True, required=False)
option: Str('mobile', attribute=True, autofill=False, cli_name='mobile', multivalue=True, required=False)
option: Flag('no_members', autofill=True, default=False, exclude='webui')
option: Str('ou', attribute=True, autofill=False, cli_name='orgunit', multivalue=False, required=False)
@@ -5172,7 +5172,7 @@ option: Str('krbprincipalname', attribute=True, autofill=True, cli_name='princip
option: Str('l', attribute=True, cli_name='city', multivalue=False, required=False)
option: Str('loginshell', attribute=True, cli_name='shell', multivalue=False, required=False)
option: Str('mail', attribute=True, cli_name='email', multivalue=True, required=False)
-option: Str('manager', attribute=True, cli_name='manager', multivalue=False, required=False)
+option: Str('manager', attribute=True, cli_name='manager', multivalue=True, required=False)
option: Str('mobile', attribute=True, cli_name='mobile', multivalue=True, required=False)
option: Flag('no_members', autofill=True, default=False, exclude='webui')
option: Flag('noprivate', autofill=True, cli_name='noprivate', default=False)
@@ -5261,7 +5261,7 @@ option: Str('krbprincipalname', attribute=True, autofill=False, cli_name='princi
option: Str('l', attribute=True, autofill=False, cli_name='city', multivalue=False, query=True, required=False)
option: Str('loginshell', attribute=True, autofill=False, cli_name='shell', multivalue=False, query=True, required=False)
option: Str('mail', attribute=True, autofill=False, cli_name='email', multivalue=True, query=True, required=False)
-option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=False, query=True, required=False)
+option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=True, query=True, required=False)
option: Str('mobile', attribute=True, autofill=False, cli_name='mobile', multivalue=True, query=True, required=False)
option: Flag('no_members', autofill=True, default=False, exclude='webui')
option: Str('not_in_group*', cli_name='not_in_groups', csv=True)
@@ -5321,7 +5321,7 @@ option: DateTime('krbprincipalexpiration', attribute=True, autofill=False, cli_n
option: Str('l', attribute=True, autofill=False, cli_name='city', multivalue=False, required=False)
option: Str('loginshell', attribute=True, autofill=False, cli_name='shell', multivalue=False, required=False)
option: Str('mail', attribute=True, autofill=False, cli_name='email', multivalue=True, required=False)
-option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=False, required=False)
+option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=True, required=False)
option: Str('mobile', attribute=True, autofill=False, cli_name='mobile', multivalue=True, required=False)
option: Flag('no_members', autofill=True, default=False, exclude='webui')
option: Bool('nsaccountlock', attribute=True, autofill=False, cli_name='nsaccountlock', multivalue=False, required=False)
diff --git a/VERSION b/VERSION
index a14b89f289f7d859f381cf78a742a5a5d038d491..8255baf3450376afe012ba812845ae514f9e957e 100644
--- a/VERSION
+++ b/VERSION
@@ -90,5 +90,5 @@ IPA_DATA_VERSION=20100614120000
# #
########################################################
IPA_API_VERSION_MAJOR=2
-IPA_API_VERSION_MINOR=156
-# Last change: pvoborni - add vault container commands
+IPA_API_VERSION_MINOR=157
+# Last change: mbasti - allow to specify multiple managers per user
diff --git a/ipalib/plugins/baseuser.py b/ipalib/plugins/baseuser.py
index b974e3fb18659e7eb6e75557e0d4db3ec1197dcd..40114d6e994d0c1f814ce0c5b362c9cf4848f850 100644
--- a/ipalib/plugins/baseuser.py
+++ b/ipalib/plugins/baseuser.py
@@ -338,7 +338,7 @@ class baseuser(LDAPObject):
Str('title?',
label=_('Job Title'),
),
- Str('manager?',
+ Str('manager*',
label=_('Manager'),
),
Str('carlicense*',
@@ -426,8 +426,11 @@ class baseuser(LDAPObject):
if not manager:
return None
- if not isinstance(manager, list):
+ if isinstance(manager, tuple):
+ manager = list(manager)
+ elif not isinstance(manager, list):
manager = [manager]
+
try:
container_dn = DN(container, api.env.basedn)
for i, mgr in enumerate(manager):
diff --git a/ipatests/test_xmlrpc/test_user_plugin.py b/ipatests/test_xmlrpc/test_user_plugin.py
index a7f2584e986e262ecddd669167e6a684d545d6c9..e04fee3e4c0883c0b90532c6375a582c9b2cbd10 100644
--- a/ipatests/test_xmlrpc/test_user_plugin.py
+++ b/ipatests/test_xmlrpc/test_user_plugin.py
@@ -27,6 +27,7 @@ import functools
import datetime
import ldap
import re
+import pytest
from ipalib import api, errors
from ipatests.test_xmlrpc import objectclasses
@@ -1985,3 +1986,37 @@ class UserTracker(Tracker):
request.addfinalizer(finish)
return self
+
+
+@pytest.fixture(scope='class')
+def manager1(request):
+ t = UserTracker(u"manager1", u"manager", u"manager1")
+ return t.make_fixture(request)
+
+
+@pytest.fixture(scope='class')
+def manager2(request):
+ t = UserTracker(u"manager2", u"manager", u"manager2")
+ return t.make_fixture(request)
+
+
+@pytest.fixture(scope='class')
+def user(request):
+ t = UserTracker(u"user", u"test", u"user")
+ return t.make_fixture(request)
+
+
+class TestMultipleManagers(XMLRPC_test):
+ """Tests for: https://fedorahosted.org/freeipa/ticket/5344"""
+ def test_multiple_managers_per_user(self, manager1, manager2, user):
+ manager1.create()
+ manager2.create()
+ user.create()
+
+ user.update({u"manager": [manager1.name, manager2.name]})
+
+ def test_find_user_with_multiple_managers(self, manager1, manager2, user):
+ command = user.make_find_command(
+ manager=[manager1.name, manager2.name])
+ result = command()
+ user.check_find(result)
--
2.4.3
--
Manage your subscription for the Freeipa-devel mailing list:
https://www.redhat.com/mailman/listinfo/freeipa-devel
Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code