summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipalib/__init__.py20
-rw-r--r--ipalib/cli.py13
-rw-r--r--ipalib/frontend.py29
-rw-r--r--ipalib/output.py50
-rw-r--r--ipalib/plugins/baseldap.py12
-rw-r--r--ipalib/plugins/cert.py68
-rw-r--r--ipalib/plugins/group.py32
-rw-r--r--ipalib/plugins/host.py28
-rw-r--r--ipalib/plugins/hostgroup.py18
-rw-r--r--ipalib/plugins/netgroup.py25
-rw-r--r--ipalib/plugins/rolegroup.py22
-rw-r--r--ipalib/plugins/service.py4
-rw-r--r--ipalib/plugins/taskgroup.py18
-rw-r--r--ipalib/plugins/user.py14
-rw-r--r--tests/test_xmlrpc/objectclasses.py1
-rw-r--r--tests/test_xmlrpc/test_group_plugin.py25
-rw-r--r--tests/test_xmlrpc/test_hbac_plugin.py20
-rw-r--r--tests/test_xmlrpc/test_host_plugin.py20
-rw-r--r--tests/test_xmlrpc/test_hostgroup_plugin.py20
-rw-r--r--tests/test_xmlrpc/test_pwpolicy.py14
-rw-r--r--tests/test_xmlrpc/test_rolegroup_plugin.py24
-rw-r--r--tests/test_xmlrpc/test_service_plugin.py11
-rw-r--r--tests/test_xmlrpc/test_taskgroup_plugin.py42
-rw-r--r--tests/test_xmlrpc/test_user_plugin.py21
24 files changed, 389 insertions, 162 deletions
diff --git a/ipalib/__init__.py b/ipalib/__init__.py
index 83956e16d..beaf0ab51 100644
--- a/ipalib/__init__.py
+++ b/ipalib/__init__.py
@@ -584,9 +584,9 @@ For example, say we setup a command like this:
...
... def execute(self, key, **options):
... items = dict(
-... fruit='apple',
-... pet='dog',
-... city='Berlin',
+... fruit=u'apple',
+... pet=u'dog',
+... city=u'Berlin',
... )
... if key in items:
... return dict(result=items[key])
@@ -627,9 +627,9 @@ through the ``ipa`` script basically will do the following:
-----------
show-items:
-----------
- city = 'Berlin'
- fruit = 'apple'
- pet = 'dog'
+ city = u'Berlin'
+ fruit = u'apple'
+ pet = u'dog'
-------
3 items
-------
@@ -641,9 +641,9 @@ Similarly, calling it with ``reverse=True`` would result in the following:
-----------
show-items:
-----------
- pet = 'dog'
- fruit = 'apple'
- city = 'Berlin'
+ pet = u'dog'
+ fruit = u'apple'
+ city = u'Berlin'
--------------------------
3 items (in reverse order)
--------------------------
@@ -652,7 +652,7 @@ Lastly, providing a ``key`` would result in the following:
>>> result = api.Command.show_items(u'city')
>>> api.Command.show_items.output_for_cli(textui, result, 'city', reverse=False)
-city = 'Berlin'
+city = u'Berlin'
See the `ipalib.cli.textui` plugin for a description of its methods.
diff --git a/ipalib/cli.py b/ipalib/cli.py
index b3980945b..d8c4b8058 100644
--- a/ipalib/cli.py
+++ b/ipalib/cli.py
@@ -144,7 +144,6 @@ class textui(backend.Backend):
Convert a binary value to base64. We know a value is binary
if it is a python str type, otherwise it is a plain string.
"""
- assert isinstance(value, basestring)
if type(value) is str:
return base64.b64encode(value)
else:
@@ -231,15 +230,15 @@ class textui(backend.Backend):
>>> items = [
... ('in_server', True),
- ... ('mode', 'production'),
+ ... ('mode', u'production'),
... ]
>>> ui = textui()
>>> ui.print_keyval(items)
in_server = True
- mode = 'production'
+ mode = u'production'
>>> ui.print_keyval(items, indent=0)
in_server = True
- mode = 'production'
+ mode = u'production'
Also see `textui.print_indented`.
"""
@@ -354,7 +353,11 @@ class textui(backend.Backend):
if isinstance(value, (list, tuple)):
value = map(lambda v: self.encode_binary(v), value)
value = ', '.join(value)
- self.print_indented(format % (label, value), indent)
+ if isinstance(value, dict):
+ self.print_indented(format % (label, ''), indent)
+ self.print_entry(value, params, indent=indent+1)
+ else:
+ self.print_indented(format % (label, value), indent)
def print_dashed(self, string, above=True, below=True, indent=0, dash='-'):
diff --git a/ipalib/frontend.py b/ipalib/frontend.py
index ae7ec9454..0a1566e49 100644
--- a/ipalib/frontend.py
+++ b/ipalib/frontend.py
@@ -824,16 +824,27 @@ class Command(HasParam):
result = output.get('result')
summary = output.get('summary')
- if (summary and isinstance(result, (list, tuple, dict)) and result):
- textui.print_name(self.name)
-
- if isinstance(result, (tuple, list)):
- textui.print_entries(result, self.output_params)
- elif isinstance(result, dict):
- textui.print_entry(result, self.output_params)
+ for o in self.output:
+ if 'no_display' in self.output[o].flags:
+ continue
+ result = output[o]
+
+ if isinstance(result, (tuple, list)):
+ textui.print_entries(result, self.output_params)
+ elif isinstance(result, dict):
+ textui.print_entry(result, self.output_params)
+ elif isinstance(result, unicode):
+ if o == 'summary':
+ textui.print_summary(result)
+ else:
+ textui.print_indented(result)
+ elif isinstance(result, bool):
+ # the Delete commands return a boolean indicating
+ # success or failure. Ignore these.
+ pass
+ elif isinstance(result, int):
+ textui.print_count(result, '%s %%d' % self.output[o].doc)
- if isinstance(summary, unicode):
- textui.print_summary(summary)
class LocalOrRemote(Command):
diff --git a/ipalib/output.py b/ipalib/output.py
index 425ff977c..757e7155e 100644
--- a/ipalib/output.py
+++ b/ipalib/output.py
@@ -29,18 +29,55 @@ from plugable import ReadOnly, lock
class Output(ReadOnly):
"""
Simple description of a member in the return value ``dict``.
+
+ This class controls both the type of object being returned by
+ a command as well as how the output will be displayed.
+
+ For example, this class defines two return results: an entry
+ and a value.
+
+ >>> from ipalib import crud, output
+ >>> class user(crud.Update):
+ ...
+ ... has_output = (
+ ... output.Entry('result'),
+ ... output.value,
+ ... )
+
+ The order of the values in has_output controls the order of output.
+ If you have values that you don't want to be printed then add
+ ``'no_display'`` to flags.
+
+ The difference between ``'no_dipslay`` and ``'no_output'`` is
+ that ``'no_output`` will prevent a Param value from being returned
+ at all. ``'no_display'`` will cause the API to return a value, it
+ simply won't be displayed to the user. This is so some things may
+ be returned that while not interesting to us, but may be to others.
+
+ >>> from ipalib import crud, output
+ >>> myvalue = output.Output('myvalue', unicode,
+ ... 'Do not print this value', flags=['no_display'],
+ ... )
+ >>> class user(crud.Update):
+ ...
+ ... has_output = (
+ ... output.Entry('result'),
+ ... myvalue,
+ ... )
"""
type = None
validate = None
doc = None
+ flags = []
- def __init__(self, name, type=None, doc=None):
+ def __init__(self, name, type=None, doc=None, flags=[]):
self.name = name
if type is not None:
self.type = type
if doc is not None:
self.doc = doc
+ self.flags = flags
lock(self)
def __repr__(self):
@@ -77,28 +114,29 @@ summary = Output('summary', (unicode, NoneType),
)
value = Output('value', unicode,
- "The primary_key value of the entry, e.g. 'jdoe' for a user"
+ "The primary_key value of the entry, e.g. 'jdoe' for a user",
+ flags=['no_display'],
)
-standard = (result, summary)
+standard = (summary, result)
standard_entry = (
+ summary,
Entry('result'),
value,
- summary,
)
standard_list_of_entries = (
+ summary,
ListOfEntries('result'),
Output('count', int, 'Number of entries returned'),
Output('truncated', bool, 'True if not all results were returned'),
- summary,
)
standard_delete = (
+ summary,
Output('result', bool, 'True means the operation was successful'),
value,
- summary,
)
standard_value = standard_delete
diff --git a/ipalib/plugins/baseldap.py b/ipalib/plugins/baseldap.py
index eeea7a6c4..964f8e5d9 100644
--- a/ipalib/plugins/baseldap.py
+++ b/ipalib/plugins/baseldap.py
@@ -102,7 +102,7 @@ class LDAPObject(Object):
for ldap_obj_name in self.attribute_members[attr]:
ldap_obj = self.api.Object[ldap_obj_name]
if member.find(ldap_obj.container_dn) > 0:
- new_attr = '%s %s' % (attr, ldap_obj.object_name)
+ new_attr = '%s_%s' % (attr, ldap_obj.object_name)
entry_attrs.setdefault(new_attr, []).append(
ldap_obj.get_primary_key_from_dn(member)
)
@@ -521,14 +521,14 @@ class LDAPAddMember(LDAPModMember):
has_output = (
output.Entry('result'),
- output.Output('completed',
- type=int,
- doc='Number of members added',
- ),
output.Output('failed',
type=dict,
doc='Members that could not be added',
),
+ output.Output('completed',
+ type=int,
+ doc='Number of members added',
+ ),
)
@@ -557,7 +557,7 @@ class LDAPAddMember(LDAPModMember):
else:
completed += 1
- (dn, entry_attrs) = ldap.get_entry(dn, member_dns.keys())
+ (dn, entry_attrs) = ldap.get_entry(dn, member_dns.keys()+self.obj.default_attributes)
(completed, dn) = self.post_callback(
ldap, completed, failed, dn, entry_attrs, *keys, **options
diff --git a/ipalib/plugins/cert.py b/ipalib/plugins/cert.py
index 55b3b70bb..3931d214a 100644
--- a/ipalib/plugins/cert.py
+++ b/ipalib/plugins/cert.py
@@ -35,12 +35,12 @@ from ipalib.plugins.virtual import *
from ipalib.plugins.service import split_principal
import base64
from ipalib.request import context
-from ipapython import dnsclient
from pyasn1.error import PyAsn1Error
import logging
import traceback
from ipalib.request import ugettext as _
from ipalib.request import context
+from ipalib.output import Output
def get_serial(certificate):
"""
@@ -184,6 +184,25 @@ class cert_request(VirtualCommand):
default=False,
autofill=True
),
+ Str('certificate?',
+ label='Certificate',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('subject?',
+ label='Subject',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('serial_number?',
+ label='Serial number',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ )
+
+ has_output = (
+ Output('result',
+ type=dict,
+ doc='Dictionary mapping variable name to value',
+ ),
)
def execute(self, csr, **kw):
@@ -268,7 +287,11 @@ class cert_request(VirtualCommand):
serial = get_serial(base64.b64encode(service['usercertificate'][0]))
# revoke the certificate and remove it from the service
# entry before proceeding
- api.Command['cert_revoke'](unicode(serial), revocation_reason=4)
+ try:
+ api.Command['cert_revoke'](unicode(serial), revocation_reason=4)
+ except errors.NotImplementedError:
+ # some CA's might not implement revoke
+ pass
api.Command['service_mod'](principal, usercertificate=None)
# Request the certificate
@@ -299,7 +322,18 @@ class cert_status(VirtualCommand):
Check status of a certificate signing request.
"""
- takes_args = ('request_id')
+ takes_args = (
+ Str('request_id',
+ label='Request id',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ )
+ takes_options = (
+ Str('cert_request_status?',
+ label='Request status',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ )
operation = "certificate status"
@@ -318,7 +352,19 @@ class cert_get(VirtualCommand):
"""
takes_args = (Str('serial_number',
+ label='Serial number',
doc='serial number in decimal or if prefixed with 0x in hexadecimal'))
+ takes_options = (
+ Str('certificate?',
+ label='Certificate',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('subject?',
+ label='Subject',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ )
+
operation="retrieve certificate"
def execute(self, serial_number):
@@ -337,6 +383,12 @@ class cert_revoke(VirtualCommand):
takes_args = (Str('serial_number',
doc='serial number in decimal or if prefixed with 0x in hexadecimal'))
+ takes_options = (
+ Flag('revoked?',
+ label='Revoked',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ )
operation = "revoke certificate"
# FIXME: The default is 0. Is this really an Int param?
@@ -366,6 +418,16 @@ class cert_remove_hold(VirtualCommand):
takes_args = (Str('serial_number',
doc='serial number in decimal or if prefixed with 0x in hexadecimal'))
+ takes_options = (
+ Flag('unrevoked?',
+ label='Unrevoked',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('error_string?',
+ label='Error',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ )
operation = "certificate remove hold"
def execute(self, serial_number, **kw):
diff --git a/ipalib/plugins/group.py b/ipalib/plugins/group.py
index 0cc42a7a6..a04330cc8 100644
--- a/ipalib/plugins/group.py
+++ b/ipalib/plugins/group.py
@@ -43,12 +43,12 @@ class group(LDAPObject):
attribute_names = {
'cn': 'name',
'gidnumber': 'group id',
- 'member user': 'member users',
- 'member group': 'member groups',
- 'memberof group': 'member of groups',
- 'memberof netgroup': 'member of netgroups',
- 'memberof rolegroup': 'member of rolegroup',
- 'memberof taskgroup': 'member of taskgroup',
+ 'member_user': 'member users',
+ 'member_group': 'member groups',
+ 'memberof_group': 'member of groups',
+ 'memberof_netgroup': 'member of netgroups',
+ 'memberof_rolegroup': 'member of rolegroup',
+ 'memberof_taskgroup': 'member of taskgroup',
}
attribute_members = {
'member': ['user', 'group'],
@@ -74,6 +74,26 @@ class group(LDAPObject):
label='GID',
doc='GID (use this option to set it manually)',
),
+ Str('member_group?',
+ label='Member Groups',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('member_user?',
+ label='Member Users',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('member?',
+ label='Failed Members',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('user?',
+ label='Users',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('group?',
+ label='Groups',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
)
api.register(group)
diff --git a/ipalib/plugins/host.py b/ipalib/plugins/host.py
index 7e9dd90ba..c459cfe09 100644
--- a/ipalib/plugins/host.py
+++ b/ipalib/plugins/host.py
@@ -54,8 +54,8 @@ class host(LDAPObject):
object_class = ['ipaobject', 'nshost', 'ipahost', 'pkiuser', 'ipaservice']
# object_class_config = 'ipahostobjectclasses'
default_attributes = [
- 'fqdn', 'description', 'l', 'nshostlocation',
- 'nshardwareplatform', 'nsosversion', 'usercertificate',
+ 'fqdn', 'description', 'l', 'nshostlocation', 'krbprincipalname',
+ 'nshardwareplatform', 'nsosversion', 'usercertificate', 'memberof',
]
uuid_attribute = 'ipauniqueid'
attribute_names = {
@@ -70,9 +70,9 @@ class host(LDAPObject):
'enrolledby user': 'enrolled by',
'krbprincipalname': 'kerberos principal',
'ipauniqueid': 'unique identifier',
- 'memberof hostgroup': 'member of hostgroups',
- 'memberof netgroup': 'member of netgroups',
- 'memberof rolegroup': 'member of rolegroups',
+ 'memberof_hostgroup': 'member of hostgroups',
+ 'memberof_netgroup': 'member of netgroups',
+ 'memberof_rolegroup': 'member of rolegroups',
}
attribute_members = {
'enrolledby': ['user'],
@@ -93,7 +93,7 @@ class host(LDAPObject):
label='Description',
doc='Description of the host',
),
- Str('locality?',
+ Str('l?',
cli_name='locality',
label='Locality',
doc='Locality of the host (Baltimore, MD)',
@@ -122,6 +122,22 @@ class host(LDAPObject):
cli_name='certificate',
doc='base-64 encoded server certificate',
),
+ Str('krbprincipalname?',
+ label='Principal Name',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('memberof_hostgroup?',
+ label='Member of Host Groups',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('memberof_netgroup?',
+ label='Member Net Groups',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('memberof_rolegroup?',
+ label='Member of Role Groups',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
)
def get_dn(self, *keys, **options):
diff --git a/ipalib/plugins/hostgroup.py b/ipalib/plugins/hostgroup.py
index 7accca621..5a723b8c8 100644
--- a/ipalib/plugins/hostgroup.py
+++ b/ipalib/plugins/hostgroup.py
@@ -37,9 +37,9 @@ class hostgroup(LDAPObject):
uuid_attribute = 'ipauniqueid'
attribute_names = {
'cn': 'names',
- 'member host': 'member hosts',
- 'member hostgroup': 'member hostgroups',
- 'memberof hostgroup': 'member of hostgroup',
+ 'member_host': 'member hosts',
+ 'member_hostgroup': 'member hostgroups',
+ 'memberof_hostgroup': 'member of hostgroup',
}
attribute_members = {
'member': ['host', 'hostgroup'],
@@ -61,6 +61,18 @@ class hostgroup(LDAPObject):
label='Description',
doc='A description of this group',
),
+ Str('member_host?',
+ label='Member Hosts',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('member_hostgroup?',
+ label='Member Host Groups',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('memberof_hostgroup?',
+ label='Member of Hostgroups',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
)
api.register(hostgroup)
diff --git a/ipalib/plugins/netgroup.py b/ipalib/plugins/netgroup.py
index 094a6d870..767bc1b35 100644
--- a/ipalib/plugins/netgroup.py
+++ b/ipalib/plugins/netgroup.py
@@ -34,22 +34,21 @@ class netgroup(LDAPObject):
object_name = 'netgroup'
object_name_plural = 'netgroups'
object_class = ['ipaobject', 'ipaassociation', 'ipanisnetgroup']
- default_attributes = ['cn', 'description', 'member', 'memberof']
+ default_attributes = ['cn', 'description', 'member', 'memberof', 'externalhost']
uuid_attribute = 'ipauniqueid'
attribute_names = {
'cn': 'name',
- 'member user': 'member users',
- 'member group': 'member groups',
- 'member host': 'member hosts',
- 'member hostgroup': 'member hostgroups',
- 'member netgroup': 'member netgroups',
- 'memberof netgroup': 'member of netgroups',
- 'externalhost': 'external hosts',
+ 'member_user': 'member users',
+ 'member_group': 'member groups',
+ 'member_host': 'member hosts',
+ 'member_hostgroup': 'member hostgroups',
+ 'member_netgroup': 'member netgroups',
+ 'memberof_netgroup': 'member of netgroups',
+ 'externalhost': 'externalhost',
}
attribute_members = {
'member': ['user', 'group', 'host', 'hostgroup', 'netgroup'],
'memberof': ['netgroup'],
- 'externalhost': [],
}
label = _('Net Groups')
@@ -72,6 +71,14 @@ class netgroup(LDAPObject):
label='NIS domain name',
doc='NIS domain name',
),
+ Str('member_host?',
+ label='Member Host',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('externalhost?',
+ label='External Host',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
)
def get_dn(self, *keys, **kwargs):
diff --git a/ipalib/plugins/rolegroup.py b/ipalib/plugins/rolegroup.py
index ea89aa519..bf21e23c0 100644
--- a/ipalib/plugins/rolegroup.py
+++ b/ipalib/plugins/rolegroup.py
@@ -36,11 +36,11 @@ class rolegroup(LDAPObject):
default_attributes = ['cn', 'description', 'member', 'memberof']
attribute_names = {
'cn': 'name',
- 'member user': 'member users',
- 'member group': 'member groups',
- 'member host': 'member hosts',
- 'member hostgroup': 'member hostgroups',
- 'memberof taskgroup': 'member of taskgroup',
+ 'member_user': 'member users',
+ 'member_group': 'member groups',
+ 'member_host': 'member hosts',
+ 'member_hostgroup': 'member hostgroups',
+ 'memberof_taskgroup': 'member of taskgroup',
}
attribute_members = {
'member': ['user', 'group', 'host', 'hostgroup'],
@@ -62,6 +62,18 @@ class rolegroup(LDAPObject):
label='Description',
doc='A description of this rolegroup',
),
+ Str('member_group?',
+ label='Member Groups',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('member_user?',
+ label='Member Users',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('memberof_taskgroup?',
+ label='Member of Task Groups',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
)
api.register(rolegroup)
diff --git a/ipalib/plugins/service.py b/ipalib/plugins/service.py
index a5de17b3a..d7c795ba3 100644
--- a/ipalib/plugins/service.py
+++ b/ipalib/plugins/service.py
@@ -123,12 +123,14 @@ class service(LDAPObject):
takes_params = (
Str('krbprincipalname', validate_principal,
+ label='Principal',
cli_name='principal',
doc='service principal',
primary_key=True,
normalizer=lambda value: normalize_principal(value),
),
Bytes('usercertificate?', validate_certificate,
+ label='Certificate',
cli_name='certificate',
doc='base-64 encoded server certificate',
),
@@ -141,6 +143,7 @@ class service_add(LDAPCreate):
"""
Add new service.
"""
+ msg_summary = _('Added service "%(value)s"')
member_attributes = ['managedby']
takes_options = (
Flag('force',
@@ -187,6 +190,7 @@ class service_del(LDAPDelete):
"""
Delete an existing service.
"""
+ msg_summary = _('Deleted service "%(value)s"')
member_attributes = ['managedby']
def pre_callback(self, ldap, dn, *keys, **options):
if self.api.env.enable_ra:
diff --git a/ipalib/plugins/taskgroup.py b/ipalib/plugins/taskgroup.py
index a39f5c004..afdbf6561 100644
--- a/ipalib/plugins/taskgroup.py
+++ b/ipalib/plugins/taskgroup.py
@@ -37,9 +37,9 @@ class taskgroup(LDAPObject):
default_attributes = ['cn', 'description', 'member', 'memberof']
attribute_names = {
'cn': 'name',
- 'member user': 'member users',
- 'member group': 'member groups',
- 'member rolegroup': 'member rolegroups',
+ 'member_user': 'member users',
+ 'member_group': 'member groups',
+ 'member_rolegroup': 'member rolegroups',
# FIXME: 'memberof ???': 'member of ???'
}
attribute_members = {
@@ -62,6 +62,18 @@ class taskgroup(LDAPObject):
label='Description',
doc='taskgroup description',
),
+ Str('member_group?',
+ label='Member Groups',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('member_user?',
+ label='Member Users',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
+ Str('member_rolegroup?',
+ label='Member Role Groups',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
)
api.register(taskgroup)
diff --git a/ipalib/plugins/user.py b/ipalib/plugins/user.py
index c06a9280f..00d64c7e4 100644
--- a/ipalib/plugins/user.py
+++ b/ipalib/plugins/user.py
@@ -38,7 +38,7 @@ class user(LDAPObject):
object_class_config = 'ipauserobjectclasses'
default_attributes = [
'uid', 'givenname', 'sn', 'homedirectory', 'loginshell', 'ou',
- 'telephonenumber', 'title',
+ 'telephonenumber', 'title', 'memberof',
]
uuid_attribute = 'ipauniqueid'
attribute_names = {
@@ -53,10 +53,10 @@ class user(LDAPObject):
'krbpasswordexpiration': 'password expiration',
'uidnumber': 'uid number',
'gidnumber': 'gid number',
- 'memberof group': 'member of groups',
- 'memberof netgroup': 'member of netgroups',
- 'memberof rolegroup': 'member of rolegroups',
- 'memberof taskgroup': 'member of taskgroups',
+ 'memberof_group': 'member of groups',
+ 'memberof_netgroup': 'member of netgroups',
+ 'memberof_rolegroup': 'member of rolegroups',
+ 'memberof_taskgroup': 'member of taskgroups',
'ipauniqueid': 'unique identifier'
}
attribute_order = [
@@ -128,6 +128,10 @@ class user(LDAPObject):
cli_name='street',
label='Street address',
),
+ Str('memberof_group?',
+ label='Groups',
+ flags=['no_create', 'no_update', 'no_search'],
+ ),
)
api.register(user)
diff --git a/tests/test_xmlrpc/objectclasses.py b/tests/test_xmlrpc/objectclasses.py
index 5f95cd7b5..857147dc3 100644
--- a/tests/test_xmlrpc/objectclasses.py
+++ b/tests/test_xmlrpc/objectclasses.py
@@ -29,6 +29,7 @@ user = [
u'inetuser',
u'posixaccount',
u'krbprincipalaux',
+ u'krbticketpolicyaux',
u'radiusprofile',
u'ipaobject',
]
diff --git a/tests/test_xmlrpc/test_group_plugin.py b/tests/test_xmlrpc/test_group_plugin.py
index a6d98f698..8f2b207c5 100644
--- a/tests/test_xmlrpc/test_group_plugin.py
+++ b/tests/test_xmlrpc/test_group_plugin.py
@@ -110,6 +110,7 @@ class test_group(Declarative):
),
expected=dict(
result=dict(
+ cn=[group1],
description=[u'New desc 1'],
),
summary=u'Modified group "testgroup1"',
@@ -143,8 +144,6 @@ class test_group(Declarative):
result=dict(
cn=[group1],
description=[u'New desc 1'],
- objectclass=objectclasses.group + [u'posixgroup'],
- ipauniqueid=[fuzzy_uuid],
gidnumber=[fuzzy_digits],
),
value=group1,
@@ -177,6 +176,7 @@ class test_group(Declarative):
truncated=False,
result=[
dict(
+ #dn=u'cn=%s,cn=groups,cn=accounts,%s' % (group1, api.env.basedn),
cn=[group1],
description=[u'New desc 1'],
gidnumber=[fuzzy_digits],
@@ -261,6 +261,7 @@ class test_group(Declarative):
),
expected=dict(
result=dict(
+ cn=[group2],
description=[u'New desc 2'],
),
summary=u'Modified group "testgroup2"',
@@ -292,6 +293,7 @@ class test_group(Declarative):
truncated=False,
result=[
dict(
+ #dn=u'cn=%s,cn=groups,cn=accounts,%s' % (group2, api.env.basedn),
cn=[group2],
description=[u'New desc 2'],
),
@@ -310,27 +312,32 @@ class test_group(Declarative):
truncated=False,
result=[
{
- 'member user': [u'admin'],
+ #'dn': u'cn=admins,cn=groups,cn=accounts,%s' % api.env.basedn,
+ 'member_user': [u'admin'],
'gidnumber': [fuzzy_digits],
'cn': [u'admins'],
'description': [u'Account administrators group'],
},
{
+ #'dn': u'cn=ipausers,cn=groups,cn=accounts,%s' % api.env.basedn,
'gidnumber': [fuzzy_digits],
'cn': [u'ipausers'],
'description': [u'Default group for all users'],
},
{
+ #'dn': u'cn=editors,cn=groups,cn=accounts,%s' % api.env.basedn,
'gidnumber': [fuzzy_digits],
'cn': [u'editors'],
'description': [u'Limited admins who can edit other users'],
},
dict(
+ #dn=u'cn=%s,cn=groups,cn=accounts,%s' % (group1, api.env.basedn),
cn=[group1],
description=[u'New desc 1'],
gidnumber=[fuzzy_digits],
),
dict(
+ #dn=u'cn=%s,cn=groups,cn=accounts,%s' % (group2, api.env.basedn),
cn=[group2],
description=[u'New desc 2'],
),
@@ -355,7 +362,11 @@ class test_group(Declarative):
user=tuple(),
),
),
- result={'member group': (group2,)},
+ result={'member_group': (group2,),
+ 'gidnumber': [fuzzy_digits],
+ 'cn': [group1],
+ 'description': [u'New desc 1'],
+ },
),
),
@@ -373,7 +384,11 @@ class test_group(Declarative):
user=tuple(),
),
),
- result={'member group': (group2,)},
+ result={'member_group': (group2,),
+ 'gidnumber': [fuzzy_digits],
+ 'cn': [group1],
+ 'description': [u'New desc 1'],
+ },
),
),
diff --git a/tests/test_xmlrpc/test_hbac_plugin.py b/tests/test_xmlrpc/test_hbac_plugin.py
index aa7bb78a4..1edce4677 100644
--- a/tests/test_xmlrpc/test_hbac_plugin.py
+++ b/tests/test_xmlrpc/test_hbac_plugin.py
@@ -178,8 +178,8 @@ class test_hbac(XMLRPC_test):
assert 'group' in failed['memberuser']
assert not failed['memberuser']['group']
entry = ret['result']
- assert_attr_equal(entry, 'memberuser user', self.test_user)
- assert_attr_equal(entry, 'memberuser group', self.test_group)
+ assert_attr_equal(entry, 'memberuser_user', self.test_user)
+ assert_attr_equal(entry, 'memberuser_group', self.test_group)
def test_9_hbac_remove_user(self):
"""
@@ -196,8 +196,8 @@ class test_hbac(XMLRPC_test):
assert 'group' in failed['memberuser']
assert not failed['memberuser']['group']
entry = ret['result']
- assert 'memberuser user' not in entry
- assert 'memberuser group' not in entry
+ assert 'memberuser_user' not in entry
+ assert 'memberuser_group' not in entry
def test_a_hbac_add_host(self):
"""
@@ -214,8 +214,8 @@ class test_hbac(XMLRPC_test):
assert 'hostgroup' in failed['memberhost']
assert not failed['memberhost']['hostgroup']
entry = ret['result']
- assert_attr_equal(entry, 'memberhost host', self.test_host)
- assert_attr_equal(entry, 'memberhost hostgroup', self.test_hostgroup)
+ assert_attr_equal(entry, 'memberhost_host', self.test_host)
+ assert_attr_equal(entry, 'memberhost_hostgroup', self.test_hostgroup)
def test_b_hbac_remove_host(self):
"""
@@ -232,8 +232,8 @@ class test_hbac(XMLRPC_test):
assert 'hostgroup' in failed['memberhost']
assert not failed['memberhost']['hostgroup']
entry = ret['result']
- assert 'memberhost host' not in res[1]
- assert 'memberhost hostgroup' not in res[1]
+ assert 'memberhost_host' not in res[1]
+ assert 'memberhost_hostgroup' not in res[1]
def test_a_hbac_add_sourcehost(self):
"""
@@ -250,8 +250,8 @@ class test_hbac(XMLRPC_test):
assert 'hostgroup' in failed['sourcehost']
assert not failed['sourcehost']['hostgroup']
entry = ret['result']
- assert_attr_equal(entry, 'sourcehost host', self.test_host)
- assert_attr_equal(entry, 'sourcehost hostgroup', self.test_hostgroup)
+ assert_attr_equal(entry, 'sourcehost_host', self.test_host)
+ assert_attr_equal(entry, 'sourcehost_hostgroup', self.test_hostgroup)
def test_b_hbac_remove_host(self):
"""
diff --git a/tests/test_xmlrpc/test_host_plugin.py b/tests/test_xmlrpc/test_host_plugin.py
index 167481a45..753e3d2c1 100644
--- a/tests/test_xmlrpc/test_host_plugin.py
+++ b/tests/test_xmlrpc/test_host_plugin.py
@@ -65,7 +65,7 @@ class test_host(Declarative):
command=('host_add', [fqdn1],
dict(
description=u'Test host 1',
- localityname=u'Undisclosed location 1',
+ l=u'Undisclosed location 1',
),
),
expected=dict(
@@ -73,14 +73,11 @@ class test_host(Declarative):
summary=u'Added host "%s"' % fqdn1,
result=dict(
dn=dn1,
- cn=[fqdn1], # FIXME: we should only return fqdn
fqdn=[fqdn1],
description=[u'Test host 1'],
- localityname=[u'Undisclosed location 1'],
+ l=[u'Undisclosed location 1'],
krbprincipalname=[u'host/%s@%s' % (fqdn1, api.env.realm)],
- serverhostname=[u'testhost1'],
objectclass=objectclasses.host,
- managedby=[dn1],
ipauniqueid=[fuzzy_uuid],
),
),
@@ -109,7 +106,8 @@ class test_host(Declarative):
dn=dn1,
fqdn=[fqdn1],
description=[u'Test host 1'],
- localityname=[u'Undisclosed location 1'],
+ l=[u'Undisclosed location 1'],
+ krbprincipalname=[u'host/%s@%s' % (fqdn1, api.env.realm)],
),
),
),
@@ -150,9 +148,11 @@ class test_host(Declarative):
summary=u'1 host matched',
result=[
dict(
+ #dn=dn1,
fqdn=[fqdn1],
description=[u'Test host 1'],
- localityname=[u'Undisclosed location 1'],
+ l=[u'Undisclosed location 1'],
+ krbprincipalname=[u'host/%s@%s' % (fqdn1, api.env.realm)],
),
],
),
@@ -195,6 +195,9 @@ class test_host(Declarative):
summary=u'Modified host "%s"' % fqdn1,
result=dict(
description=[u'Updated host 1'],
+ fqdn=[fqdn1],
+ l=[u'Undisclosed location 1'],
+ krbprincipalname=[u'host/%s@%s' % (fqdn1, api.env.realm)],
),
),
),
@@ -210,7 +213,8 @@ class test_host(Declarative):
dn=dn1,
fqdn=[fqdn1],
description=[u'Updated host 1'],
- localityname=[u'Undisclosed location 1'],
+ l=[u'Undisclosed location 1'],
+ krbprincipalname=[u'host/%s@%s' % (fqdn1, api.env.realm)],
),
),
),
diff --git a/tests/test_xmlrpc/test_hostgroup_plugin.py b/tests/test_xmlrpc/test_hostgroup_plugin.py
index 3fef9b4e0..4fc67a616 100644
--- a/tests/test_xmlrpc/test_hostgroup_plugin.py
+++ b/tests/test_xmlrpc/test_hostgroup_plugin.py
@@ -98,7 +98,7 @@ class test_hostgroup(Declarative):
command=('host_add', [fqdn1],
dict(
description=u'Test host 1',
- localityname=u'Undisclosed location 1',
+ l=u'Undisclosed location 1',
),
),
expected=dict(
@@ -106,14 +106,11 @@ class test_hostgroup(Declarative):
summary=u'Added host "%s"' % fqdn1,
result=dict(
dn=host_dn1,
- cn=[fqdn1], # FIXME: we should only return fqdn
fqdn=[fqdn1],
description=[u'Test host 1'],
- localityname=[u'Undisclosed location 1'],
+ l=[u'Undisclosed location 1'],
krbprincipalname=[u'host/%s@%s' % (fqdn1, api.env.realm)],
- serverhostname=[u'testhost1'],
objectclass=objectclasses.host,
- managedby=[host_dn1],
ipauniqueid=[fuzzy_uuid],
),
),
@@ -134,7 +131,9 @@ class test_hostgroup(Declarative):
),
),
result={
- 'member host': [fqdn1],
+ 'cn': [hostgroup1],
+ 'description': [u'Test hostgroup 1'],
+ 'member_host': [fqdn1],
},
),
),
@@ -148,7 +147,7 @@ class test_hostgroup(Declarative):
summary=None,
result={
'dn': dn1,
- 'member host': [u'testhost1.%s' % api.env.domain],
+ 'member_host': [u'testhost1.%s' % api.env.domain],
'cn': [hostgroup1],
'description': [u'Test hostgroup 1'],
},
@@ -165,7 +164,8 @@ class test_hostgroup(Declarative):
summary=u'1 hostgroup matched',
result=[
{
- 'member host': [u'testhost1.%s' % api.env.domain],
+ #'dn': dn1,
+ 'member_host': [u'testhost1.%s' % api.env.domain],
'cn': [hostgroup1],
'description': [u'Test hostgroup 1'],
},
@@ -183,7 +183,9 @@ class test_hostgroup(Declarative):
value=hostgroup1,
summary=u'Modified hostgroup "testhostgroup1"',
result=dict(
+ cn=[hostgroup1],
description=[u'Updated hostgroup 1'],
+ member_host=[u'testhost1.%s' % api.env.domain],
),
),
),
@@ -197,7 +199,7 @@ class test_hostgroup(Declarative):
summary=None,
result={
'dn': dn1,
- 'member host': [u'testhost1.%s' % api.env.domain],
+ 'member_host': [u'testhost1.%s' % api.env.domain],
'cn': [hostgroup1],
'description': [u'Updated hostgroup 1'],
},
diff --git a/tests/test_xmlrpc/test_pwpolicy.py b/tests/test_xmlrpc/test_pwpolicy.py
index 080f39bf9..ceb4f8b62 100644
--- a/tests/test_xmlrpc/test_pwpolicy.py
+++ b/tests/test_xmlrpc/test_pwpolicy.py
@@ -148,17 +148,3 @@ class test_pwpolicy(XMLRPC_test):
# Remove the user we created
api.Command['user_del'](self.user)
-
- def test_a_pwpolicy_del(self):
- """
- Remove the second test policy with `xmlrpc.pwpolicy_del`.
- """
- assert api.Command['pwpolicy_del'](group=self.group2)['result'] is True
-
- # Verify that it is gone
- try:
- api.Command['pwpolicy_show'](group=self.group2)
- except errors.NotFound:
- pass
- else:
- assert False
diff --git a/tests/test_xmlrpc/test_rolegroup_plugin.py b/tests/test_xmlrpc/test_rolegroup_plugin.py
index 7aa6842df..801dadeda 100644
--- a/tests/test_xmlrpc/test_rolegroup_plugin.py
+++ b/tests/test_xmlrpc/test_rolegroup_plugin.py
@@ -150,7 +150,9 @@ class test_rolegroup(Declarative):
),
),
result={
- 'member group': [group1],
+ 'cn': [rolegroup1],
+ 'description': [u'rolegroup desc 1'],
+ 'member_group': [group1],
}
),
),
@@ -166,7 +168,7 @@ class test_rolegroup(Declarative):
'dn': rolegroup1_dn,
'cn': [rolegroup1],
'description': [u'rolegroup desc 1'],
- 'member group': [group1],
+ 'member_group': [group1],
},
),
),
@@ -181,11 +183,10 @@ class test_rolegroup(Declarative):
summary=u'1 rolegroup matched',
result=[
{
- # FIXME: find() should return 'dn' just like show()
#'dn': rolegroup1_dn,
'cn': [rolegroup1],
'description': [u'rolegroup desc 1'],
- 'member group': [group1],
+ 'member_group': [group1],
},
],
),
@@ -201,9 +202,10 @@ class test_rolegroup(Declarative):
summary=u'1 rolegroup matched',
result=[
{
+ #'dn': rolegroup1_dn,
'cn': [rolegroup1],
'description': [u'rolegroup desc 1'],
- 'member group': [group1],
+ 'member_group': [group1],
},
],
),
@@ -237,9 +239,10 @@ class test_rolegroup(Declarative):
summary=u'1 rolegroup matched',
result=[
{
+ #'dn': rolegroup1_dn,
'cn': [rolegroup1],
'description': [u'rolegroup desc 1'],
- 'member group': [group1],
+ 'member_group': [group1],
},
],
),
@@ -255,11 +258,13 @@ class test_rolegroup(Declarative):
summary=u'2 rolegroups matched',
result=[
{
+ #'dn': rolegroup1_dn,
'cn': [rolegroup1],
'description': [u'rolegroup desc 1'],
- 'member group': [group1],
+ 'member_group': [group1],
},
{
+ #'dn': rolegroup2_dn,
'cn': [rolegroup2],
'description': [u'rolegroup desc 2'],
},
@@ -277,7 +282,9 @@ class test_rolegroup(Declarative):
value=rolegroup1,
summary=u'Modified rolegroup "test-rolegroup-1"',
result=dict(
+ cn=[rolegroup1],
description=[u'New desc 1'],
+ member_group=[group1],
),
),
),
@@ -293,7 +300,7 @@ class test_rolegroup(Declarative):
'dn': rolegroup1_dn,
'cn': [rolegroup1],
'description': [u'New desc 1'],
- 'member group': [group1],
+ 'member_group': [group1],
},
),
),
@@ -384,6 +391,7 @@ class test_rolegroup(Declarative):
summary=u'1 rolegroup matched',
result=[
{
+ #'dn': rolegroup2_dn,
'cn': [rolegroup2],
'description': [u'rolegroup desc 2'],
},
diff --git a/tests/test_xmlrpc/test_service_plugin.py b/tests/test_xmlrpc/test_service_plugin.py
index 5a97a47c5..432a86b0e 100644
--- a/tests/test_xmlrpc/test_service_plugin.py
+++ b/tests/test_xmlrpc/test_service_plugin.py
@@ -101,16 +101,7 @@ class test_service(XMLRPC_test):
entries = api.Command['service_find'](self.principal)['result']
assert_attr_equal(entries[0], 'krbprincipalname', self.principal)
- def test_7_service_mod(self):
- """
- Test the `xmlrpc.service_mod` method.
- """
- modkw = dict(self.kw)
- modkw['usercertificate'] = 'QmluYXJ5IGNlcnRpZmljYXRl'
- entry = api.Command['service_mod'](**modkw)['result']
- assert_attr_equal(entry, 'usercertificate', 'Binary certificate')
-
- def test_8_service_del(self):
+ def test_7_service_del(self):
"""
Test the `xmlrpc.service_del` method.
"""
diff --git a/tests/test_xmlrpc/test_taskgroup_plugin.py b/tests/test_xmlrpc/test_taskgroup_plugin.py
index 191880a35..42e0ac503 100644
--- a/tests/test_xmlrpc/test_taskgroup_plugin.py
+++ b/tests/test_xmlrpc/test_taskgroup_plugin.py
@@ -170,8 +170,10 @@ class test_taskgroup(Declarative):
),
),
result={
- 'member rolegroup': [rolegroup1],
- 'member group': [group1],
+ 'cn': [taskgroup1],
+ 'description': [u'Test desc 1'],
+ 'member_rolegroup': [rolegroup1],
+ 'member_group': [group1],
}
),
),
@@ -187,8 +189,8 @@ class test_taskgroup(Declarative):
'dn': taskgroup1_dn,
'cn': [taskgroup1],
'description': [u'Test desc 1'],
- 'member rolegroup': [rolegroup1],
- 'member group': [group1],
+ 'member_rolegroup': [rolegroup1],
+ 'member_group': [group1],
},
),
),
@@ -203,12 +205,11 @@ class test_taskgroup(Declarative):
summary=u'1 taskgroup matched',
result=[
{
- # FIXME: crud.Search subclasses should return 'dn' also
#'dn': taskgroup1_dn,
'cn': [taskgroup1],
'description': [u'Test desc 1'],
- 'member rolegroup': [rolegroup1],
- 'member group': [group1],
+ 'member_rolegroup': [rolegroup1],
+ 'member_group': [group1],
},
],
),
@@ -224,10 +225,11 @@ class test_taskgroup(Declarative):
summary=u'1 taskgroup matched',
result=[
{
+ #'dn': taskgroup1_dn,
'cn': [taskgroup1],
'description': [u'Test desc 1'],
- 'member rolegroup': [rolegroup1],
- 'member group': [group1],
+ 'member_rolegroup': [rolegroup1],
+ 'member_group': [group1],
},
],
),
@@ -261,12 +263,11 @@ class test_taskgroup(Declarative):
summary=u'1 taskgroup matched',
result=[
{
- # FIXME: crud.Search subclasses should return 'dn' also
#'dn': taskgroup1_dn,
'cn': [taskgroup1],
'description': [u'Test desc 1'],
- 'member rolegroup': [rolegroup1],
- 'member group': [group1],
+ 'member_rolegroup': [rolegroup1],
+ 'member_group': [group1],
},
],
),
@@ -282,12 +283,14 @@ class test_taskgroup(Declarative):
summary=u'2 taskgroups matched',
result=[
{
+ #'dn': taskgroup1_dn,
'cn': [taskgroup1],
'description': [u'Test desc 1'],
- 'member rolegroup': [rolegroup1],
- 'member group': [group1],
+ 'member_rolegroup': [rolegroup1],
+ 'member_group': [group1],
},
{
+ #'dn': taskgroup2_dn,
'cn': [taskgroup2],
'description': [u'Test desc 2'],
},
@@ -305,7 +308,11 @@ class test_taskgroup(Declarative):
value=taskgroup1,
summary=u'Modified taskgroup "test-taskgroup-1"',
result=dict(
+ cn=[taskgroup1],
description=[u'New desc 1'],
+ member_rolegroup=[rolegroup1],
+ member_group=[group1],
+
),
),
),
@@ -321,8 +328,8 @@ class test_taskgroup(Declarative):
'dn': taskgroup1_dn,
'cn': [taskgroup1],
'description': [u'New desc 1'],
- 'member rolegroup': [rolegroup1],
- 'member group': [group1],
+ 'member_rolegroup': [rolegroup1],
+ 'member_group': [group1],
},
),
),
@@ -343,7 +350,7 @@ class test_taskgroup(Declarative):
),
),
result={
- 'member rolegroup': [rolegroup1],
+ 'member_rolegroup': [rolegroup1],
}
),
),
@@ -390,6 +397,7 @@ class test_taskgroup(Declarative):
summary=u'1 taskgroup matched',
result=[
{
+ #'dn': taskgroup2_dn,
'cn': [taskgroup2],
'description': [u'Test desc 2'],
},
diff --git a/tests/test_xmlrpc/test_user_plugin.py b/tests/test_xmlrpc/test_user_plugin.py
index 7dfafc730..b2cf6fcc4 100644
--- a/tests/test_xmlrpc/test_user_plugin.py
+++ b/tests/test_xmlrpc/test_user_plugin.py
@@ -70,7 +70,6 @@ class test_user(Declarative):
value=user1,
summary=u'Added user "tuser1"',
result=dict(
- cn=[u'Test User1'],
gecos=[user1],
givenname=[u'Test'],
homedirectory=[u'/home/tuser1'],
@@ -79,7 +78,6 @@ class test_user(Declarative):
objectclass=objectclasses.user,
sn=[u'User1'],
uid=[user1],
- gidnumber=[fuzzy_digits],
ipauniqueid=[fuzzy_uuid],
dn=u'uid=tuser1,cn=users,cn=accounts,' + api.env.basedn,
),
@@ -109,6 +107,7 @@ class test_user(Declarative):
loginshell=[u'/bin/sh'],
sn=[u'User1'],
uid=[user1],
+ memberof_group=[u'ipausers'],
),
value=user1,
summary=None,
@@ -124,13 +123,14 @@ class test_user(Declarative):
expected=dict(
result=[
{
+ #'dn': u'uid=user1,cn=users,cn=accounts,' + api.env.basedn,
'cn': [u'Test User1'],
'gecos': [user1],
'givenname': [u'Test'],
'homedirectory': [u'/home/tuser1'],
'krbprincipalname': [u'tuser1@' + api.env.realm],
'loginshell': [u'/bin/sh'],
- 'memberof group': [u'ipausers'],
+ 'memberof_group': [u'ipausers'],
'objectclass': objectclasses.user,
'sn': [u'User1'],
'uid': [user1],
@@ -140,8 +140,7 @@ class test_user(Declarative):
},
],
summary=u'1 user matched',
- count=1,
- truncated=False,
+ count=1, truncated=False,
),
),
@@ -154,11 +153,13 @@ class test_user(Declarative):
expected=dict(
result=[
dict(
+ #dn=u'uid=tuser1,cn=users,cn=accounts,' + api.env.basedn,
givenname=[u'Test'],
homedirectory=[u'/home/tuser1'],
loginshell=[u'/bin/sh'],
sn=[u'User1'],
uid=[user1],
+ memberof_group=[u'ipausers'],
),
],
summary=u'1 user matched',
@@ -176,17 +177,21 @@ class test_user(Declarative):
expected=dict(
result=[
dict(
+ #dn=u'uid=admin,cn=users,cn=accounts,' + api.env.basedn,
homedirectory=[u'/home/admin'],
loginshell=[u'/bin/bash'],
sn=[u'Administrator'],
uid=[u'admin'],
+ memberof_group=[u'admins'],
),
dict(
+ #dn=u'uid=tuser1,cn=users,cn=accounts,' + api.env.basedn,
givenname=[u'Test'],
homedirectory=[u'/home/tuser1'],
loginshell=[u'/bin/sh'],
sn=[u'User1'],
uid=[user1],
+ memberof_group=[u'ipausers'],
),
],
summary=u'2 users matched',
@@ -230,6 +235,11 @@ class test_user(Declarative):
expected=dict(
result=dict(
givenname=[u'Finkle'],
+ homedirectory=[u'/home/tuser1'],
+ loginshell=[u'/bin/sh'],
+ sn=[u'User1'],
+ uid=[user1],
+ memberof_group=[u'ipausers'],
),
summary=u'Modified user "tuser1"',
value=user1,
@@ -248,6 +258,7 @@ class test_user(Declarative):
loginshell=[u'/bin/sh'],
sn=[u'User1'],
uid=[user1],
+ memberof_group=[u'ipausers'],
),
summary=None,
value=user1,