summaryrefslogtreecommitdiffstats
path: root/ipalib
diff options
context:
space:
mode:
Diffstat (limited to 'ipalib')
-rw-r--r--ipalib/crud.py6
-rw-r--r--ipalib/parameters.py3
-rw-r--r--ipalib/plugins/automount.py2
-rw-r--r--ipalib/plugins/baseldap.py21
-rw-r--r--ipalib/plugins/group.py2
-rw-r--r--ipalib/plugins/permission.py2
-rw-r--r--ipalib/plugins/privilege.py2
-rw-r--r--ipalib/plugins/role.py2
-rw-r--r--ipalib/plugins/user.py2
9 files changed, 23 insertions, 19 deletions
diff --git a/ipalib/crud.py b/ipalib/crud.py
index 833914cf..b9dfb025 100644
--- a/ipalib/crud.py
+++ b/ipalib/crud.py
@@ -144,7 +144,7 @@ class Create(Method):
continue
if 'ask_create' in option.flags:
yield option.clone(
- attribute=attribute, query=True, required=False,
+ attribute=attribute, query=False, required=False,
autofill=False, alwaysask=True
)
else:
@@ -161,6 +161,8 @@ class PKQuery(Method):
def get_args(self):
if self.obj.primary_key:
+ # Don't enforce rules on the primary key so we can reference
+ # any stored entry, legal or not
yield self.obj.primary_key.clone(attribute=True, query=True)
@@ -189,7 +191,7 @@ class Update(PKQuery):
continue
if 'ask_update' in option.flags:
yield option.clone(
- attribute=attribute, query=True, required=False,
+ attribute=attribute, query=False, required=False,
autofill=False, alwaysask=True
)
elif 'req_update' in option.flags:
diff --git a/ipalib/parameters.py b/ipalib/parameters.py
index c533f9d0..b1525b4d 100644
--- a/ipalib/parameters.py
+++ b/ipalib/parameters.py
@@ -508,7 +508,8 @@ class Param(ReadOnly):
self.class_rules = tuple(class_rules)
self.rules = rules
if self.query:
- self.all_rules = self.class_rules
+ # by definition a query enforces no class or parameter rules
+ self.all_rules = ()
else:
self.all_rules = self.class_rules + self.rules
for rule in self.all_rules:
diff --git a/ipalib/plugins/automount.py b/ipalib/plugins/automount.py
index 8d743d75..31c143d8 100644
--- a/ipalib/plugins/automount.py
+++ b/ipalib/plugins/automount.py
@@ -645,7 +645,7 @@ class automountkey(LDAPObject):
default_attributes = [
'automountkey', 'automountinformation', 'description'
]
- rdnattr = 'description'
+ rdn_is_primary_key = True
rdn_separator = ' '
takes_params = (
diff --git a/ipalib/plugins/baseldap.py b/ipalib/plugins/baseldap.py
index 725704ee..2664160f 100644
--- a/ipalib/plugins/baseldap.py
+++ b/ipalib/plugins/baseldap.py
@@ -429,7 +429,7 @@ class LDAPObject(Object):
rdn_attribute = ''
uuid_attribute = ''
attribute_members = {}
- rdnattr = None
+ rdn_is_primary_key = False # Do we need RDN change to do a rename?
password_attributes = []
# Can bind as this entry (has userPassword or krbPrincipalKey)
bindable = False
@@ -1178,7 +1178,7 @@ class LDAPUpdate(LDAPQuery, crud.Update):
has_output_params = global_output_params
def _get_rename_option(self):
- rdnparam = getattr(self.obj.params, self.obj.rdnattr)
+ rdnparam = getattr(self.obj.params, self.obj.primary_key.name)
return rdnparam.clone_rename('rename',
cli_name='rename', required=False, label=_('Rename'),
doc=_('Rename the %(ldap_obj_name)s object') % dict(
@@ -1189,7 +1189,7 @@ class LDAPUpdate(LDAPQuery, crud.Update):
def get_options(self):
for option in super(LDAPUpdate, self).get_options():
yield option
- if self.obj.rdnattr:
+ if self.obj.rdn_is_primary_key:
yield self._get_rename_option()
def execute(self, *keys, **options):
@@ -1229,18 +1229,19 @@ class LDAPUpdate(LDAPQuery, crud.Update):
rdnupdate = False
try:
- if self.obj.rdnattr and 'rename' in options:
+ if self.obj.rdn_is_primary_key and 'rename' in options:
if not options['rename']:
raise errors.ValidationError(name='rename', error=u'can\'t be empty')
- entry_attrs[self.obj.rdnattr] = options['rename']
+ entry_attrs[self.obj.primary_key.name] = options['rename']
- if self.obj.rdnattr and self.obj.rdnattr in entry_attrs:
+ if self.obj.rdn_is_primary_key and self.obj.primary_key.name in entry_attrs:
# RDN change
- ldap.update_entry_rdn(dn, unicode('%s=%s' % (self.obj.rdnattr,
- entry_attrs[self.obj.rdnattr])))
- rdnkeys = keys[:-1] + (entry_attrs[self.obj.rdnattr], )
+ ldap.update_entry_rdn(dn,
+ unicode('%s=%s' % (self.obj.primary_key.name,
+ entry_attrs[self.obj.primary_key.name])))
+ rdnkeys = keys[:-1] + (entry_attrs[self.obj.primary_key.name], )
dn = self.obj.get_dn(*rdnkeys)
- del entry_attrs[self.obj.rdnattr]
+ del entry_attrs[self.obj.primary_key.name]
options['rdnupdate'] = True
rdnupdate = True
diff --git a/ipalib/plugins/group.py b/ipalib/plugins/group.py
index b101d128..096cb9ea 100644
--- a/ipalib/plugins/group.py
+++ b/ipalib/plugins/group.py
@@ -95,7 +95,7 @@ class group(LDAPObject):
'memberofindirect': ['group', 'netgroup', 'role', 'hbacrule',
'sudorule'],
}
- rdnattr = 'cn'
+ rdn_is_primary_key = True
label = _('User Groups')
label_singular = _('User Group')
diff --git a/ipalib/plugins/permission.py b/ipalib/plugins/permission.py
index c9fd5649..ce2536d9 100644
--- a/ipalib/plugins/permission.py
+++ b/ipalib/plugins/permission.py
@@ -144,7 +144,7 @@ class permission(LDAPObject):
attribute_members = {
'member': ['privilege'],
}
- rdnattr='cn'
+ rdn_is_primary_key = True
label = _('Permissions')
label_singular = _('Permission')
diff --git a/ipalib/plugins/privilege.py b/ipalib/plugins/privilege.py
index 53f76512..53e1de22 100644
--- a/ipalib/plugins/privilege.py
+++ b/ipalib/plugins/privilege.py
@@ -60,7 +60,7 @@ class privilege(LDAPObject):
reverse_members = {
'member': ['permission'],
}
- rdnattr='cn'
+ rdn_is_primary_key = True
label = _('Privileges')
label_singular = _('Privilege')
diff --git a/ipalib/plugins/role.py b/ipalib/plugins/role.py
index ee6ebcdc..2837c418 100644
--- a/ipalib/plugins/role.py
+++ b/ipalib/plugins/role.py
@@ -76,7 +76,7 @@ class role(LDAPObject):
reverse_members = {
'member': ['privilege'],
}
- rdnattr='cn'
+ rdn_is_primary_key = True
label = _('Roles')
label_singular = _('Role')
diff --git a/ipalib/plugins/user.py b/ipalib/plugins/user.py
index d8da3a37..591132d3 100644
--- a/ipalib/plugins/user.py
+++ b/ipalib/plugins/user.py
@@ -168,7 +168,7 @@ class user(LDAPObject):
'memberof': ['group', 'netgroup', 'role', 'hbacrule', 'sudorule'],
'memberofindirect': ['group', 'netgroup', 'role', 'hbacrule', 'sudorule'],
}
- rdnattr = 'uid'
+ rdn_is_primary_key = True
bindable = True
password_attributes = [('userpassword', 'has_password'),
('krbprincipalkey', 'has_keytab')]