summaryrefslogtreecommitdiffstats
path: root/ipalib/plugins
diff options
context:
space:
mode:
authorRob Crittenden <rcritten@redhat.com>2010-12-02 11:05:54 -0500
committerAdam Young <ayoung@redhat.com>2010-12-03 13:01:42 -0500
commit8a63315ef30ac1a8fdab1394601cd588a105f66d (patch)
treeb6b149ee062c3c3ffcfc9e1246ce7ac03f86ca9e /ipalib/plugins
parent867ac1f03d77d72b25037ddf7cacccf407ff531e (diff)
downloadfreeipa-8a63315ef30ac1a8fdab1394601cd588a105f66d.tar.gz
freeipa-8a63315ef30ac1a8fdab1394601cd588a105f66d.tar.xz
freeipa-8a63315ef30ac1a8fdab1394601cd588a105f66d.zip
Provide list of available attributes for use in ACI UI.
Also include flag indicating whether the object is bindable. This will be used to determine if the object can have a selfservice ACI. ticket 446
Diffstat (limited to 'ipalib/plugins')
-rw-r--r--ipalib/plugins/baseldap.py23
-rw-r--r--ipalib/plugins/host.py1
-rw-r--r--ipalib/plugins/internal.py2
-rw-r--r--ipalib/plugins/service.py1
-rw-r--r--ipalib/plugins/user.py1
5 files changed, 26 insertions, 2 deletions
diff --git a/ipalib/plugins/baseldap.py b/ipalib/plugins/baseldap.py
index f6b992fd..00ca89f4 100644
--- a/ipalib/plugins/baseldap.py
+++ b/ipalib/plugins/baseldap.py
@@ -197,6 +197,8 @@ class LDAPObject(Object):
uuid_attribute = ''
attribute_members = {}
rdnattr = None
+ # Can bind as this entry (has userPassword or krbPrincipalKey)
+ bindable = False
container_not_found_msg = _('container entry (%(container)s) not found')
parent_not_found_msg = _('%(parent)s: %(oname)s not found')
@@ -293,14 +295,33 @@ class LDAPObject(Object):
'parent_object', 'container_dn', 'object_name', 'object_name_plural',
'object_class', 'object_class_config', 'default_attributes', 'label',
'hidden_attributes', 'uuid_attribute', 'attribute_members', 'name',
- 'takes_params', 'rdn_attribute',
+ 'takes_params', 'rdn_attribute', 'bindable',
)
+
def __json__(self):
+ ldap = self.backend
json_dict = dict(
(a, getattr(self, a)) for a in self.json_friendly_attributes
)
if self.primary_key:
json_dict['primary_key'] = self.primary_key.name
+ objectclasses = self.object_class
+ if self.object_class_config:
+ config = ldap.get_ipa_config()[1]
+ objectclasses = config.get(
+ self.object_class_config, objectclasses
+ )
+ # Get list of available attributes for this object for use
+ # in the ACI UI.
+ attrs = self.api.Backend.ldap2.schema.attribute_types(objectclasses)
+ attrlist = []
+ # Go through the MUST first
+ for (oid, attr) in attrs[0].iteritems():
+ attrlist.append(attr.names[0])
+ # And now the MAY
+ for (oid, attr) in attrs[1].iteritems():
+ attrlist.append(attr.names[0])
+ json_dict['aciattrs'] = attrlist
json_dict['methods'] = [m for m in self.methods]
return json_dict
diff --git a/ipalib/plugins/host.py b/ipalib/plugins/host.py
index a9589c6e..437b7d52 100644
--- a/ipalib/plugins/host.py
+++ b/ipalib/plugins/host.py
@@ -165,6 +165,7 @@ class host(LDAPObject):
'memberof': ['hostgroup', 'netgroup', 'role'],
'managedby': ['host'],
}
+ bindable = True
label = _('Hosts')
diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py
index 2e5d879b..1f2cf9fe 100644
--- a/ipalib/plugins/internal.py
+++ b/ipalib/plugins/internal.py
@@ -56,7 +56,7 @@ class json_metadata(Command):
((objname, json_serialize(self.api.Object[objname])), )
)
)
- retval= dict([("metadata",meta), ("messages",dict())])
+ retval= dict([("metadata",meta)])
else:
meta=dict(
diff --git a/ipalib/plugins/service.py b/ipalib/plugins/service.py
index fbb1ff2c..1e555998 100644
--- a/ipalib/plugins/service.py
+++ b/ipalib/plugins/service.py
@@ -237,6 +237,7 @@ class service(LDAPObject):
attribute_members = {
'managedby': ['host'],
}
+ bindable = True
label = _('Services')
diff --git a/ipalib/plugins/user.py b/ipalib/plugins/user.py
index 9c89c4da..c3246f5c 100644
--- a/ipalib/plugins/user.py
+++ b/ipalib/plugins/user.py
@@ -73,6 +73,7 @@ class user(LDAPObject):
'memberof': ['group', 'netgroup', 'role'],
}
rdnattr = 'uid'
+ bindable = True
label = _('Users')