7e1b55
From c9bae715b24df0f5476bdb70a2209d5f55e46a93 Mon Sep 17 00:00:00 2001
7e1b55
From: Christian Heimes <cheimes@redhat.com>
7e1b55
Date: Fri, 21 May 2021 09:26:33 +0200
7e1b55
Subject: [PATCH] Use 389-DS' dnaInterval setting to assign intervals
7e1b55
7e1b55
Signed-off-by: Christian Heimes <cheimes@redhat.com>
7e1b55
Reviewed-By: Francois Cami <fcami@redhat.com>
7e1b55
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
7e1b55
Reviewed-By: Francois Cami <fcami@redhat.com>
7e1b55
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
7e1b55
---
7e1b55
 freeipa.spec.in                 |  3 ++-
7e1b55
 install/share/dna.ldif          |  1 +
7e1b55
 install/updates/73-subid.update |  7 ++-----
7e1b55
 ipaserver/plugins/subid.py      | 14 +-------------
7e1b55
 4 files changed, 6 insertions(+), 19 deletions(-)
7e1b55
7e1b55
diff --git a/freeipa.spec.in b/freeipa.spec.in
7e1b55
index 044e3559975c399f6697d4da94b5a059eb5b407c..fa649cf4e1abe8e9928ef340a66d48d78f7e3521 100755
7e1b55
--- a/freeipa.spec.in
7e1b55
+++ b/freeipa.spec.in
7e1b55
@@ -106,8 +106,9 @@
7e1b55
 %global python_ldap_version 3.1.0-1
7e1b55
 
7e1b55
 # Make sure to use 389-ds-base versions that fix https://github.com/389ds/389-ds-base/issues/4700
7e1b55
+# and has DNA interval enabled
7e1b55
 %if 0%{?fedora} < 34
7e1b55
-%global ds_version %{lua: local v={}; v['32']='1.4.3.20-2'; v['33']='1.4.4.16-1'; print(v[rpm.expand('%{fedora}')])}
7e1b55
+%global ds_version 1.4.4.16-1
7e1b55
 %else
7e1b55
 %global ds_version 2.0.5-1
7e1b55
 %endif
7e1b55
diff --git a/install/share/dna.ldif b/install/share/dna.ldif
7e1b55
index 735faab8261feef59486f7c933b01c57ad511166..9023fcd7db5a2c121c493559e2546c85c0daf69a 100644
7e1b55
--- a/install/share/dna.ldif
7e1b55
+++ b/install/share/dna.ldif
7e1b55
@@ -31,6 +31,7 @@ dnaScope: $SUFFIX
7e1b55
 dnaThreshold: eval($SUBID_DNA_THRESHOLD)
7e1b55
 dnaSharedCfgDN: cn=subordinate-ids,cn=dna,cn=ipa,cn=etc,$SUFFIX
7e1b55
 dnaExcludeScope: cn=provisioning,$SUFFIX
7e1b55
+dnaInterval: eval($SUBID_COUNT)
7e1b55
 # TODO: enable when 389-DS' DNA plugin supports dnaStepAttr
7e1b55
 # dnaIntervalAttr: ipasubuidcount
7e1b55
 # dnaIntervalAttr: ipasubgidcount
7e1b55
diff --git a/install/updates/73-subid.update b/install/updates/73-subid.update
7e1b55
index 1aa43822a8b8c220583b81e08d70b648ca594363..e10703aa3f9528751233ddebe00b8c8c8fc5ed3f 100644
7e1b55
--- a/install/updates/73-subid.update
7e1b55
+++ b/install/updates/73-subid.update
7e1b55
@@ -62,12 +62,8 @@ default:member: cn=Subordinate ID Administrators,cn=privileges,cn=pbac,$SUFFIX
7e1b55
 # The delete-when-empty check is required because IPA uses MOD_REPLACE to
7e1b55
 # set attributes, see https://github.com/389ds/389-ds-base/issues/4597.
7e1b55
 #
7e1b55
-# TODO: remove (ipasubuidnumber>=eval($SUBID_RANGE_START) from
7e1b55
-# self-service permission when 389-DS' DNA plugin supports dnaStepAttr and
7e1b55
-# fake_dna_plugin hack has been removed.
7e1b55
-#
7e1b55
 dn: cn=subids,cn=accounts,$SUFFIX
7e1b55
-add: aci: (targetfilter = "(objectclass=ipasubordinateidentry)")(targetattr="description || ipaowner || ipauniqueid")(targattrfilters = "add=objectClass:(|(objectClass=top)(objectClass=ipasubordinateid)(objectClass=ipasubordinateidentry)(objectClass=ipasubordinategid)(objectClass=ipasubordinateuid)) && ipasubuidnumber:(|(ipasubuidnumber>=eval($SUBID_RANGE_START))(ipasubuidnumber=-1)) && ipasubuidcount:(ipasubuidcount=eval($SUBID_COUNT)) && ipasubgidnumber:(|(ipasubgidnumber>=eval($SUBID_RANGE_START))(ipasubgidnumber=-1)) && ipasubgidcount:(ipasubgidcount=eval($SUBID_COUNT)), del=ipasubuidnumber:(!(ipasubuidnumber=*)) && ipasubuidcount:(!(ipasubuidcount=*)) && ipasubgidnumber:(!(ipasubgidnumber=*)) && ipasubgidcount:(!(ipasubgidcount=*))")(version 3.0;acl "selfservice: Add subordinate id";allow (add, write) userattr = "ipaowner#SELFDN" and groupdn="ldap:///cn=Self-service subordinate ID,cn=permissions,cn=pbac,$SUFFIX";)
7e1b55
+add: aci: (targetfilter = "(objectclass=ipasubordinateidentry)")(targetattr="description || ipaowner || ipauniqueid")(targattrfilters = "add=objectClass:(|(objectClass=top)(objectClass=ipasubordinateid)(objectClass=ipasubordinateidentry)(objectClass=ipasubordinategid)(objectClass=ipasubordinateuid)) && ipasubuidnumber:(ipasubuidnumber=-1) && ipasubuidcount:(ipasubuidcount=eval($SUBID_COUNT)) && ipasubgidnumber:(ipasubgidnumber=-1) && ipasubgidcount:(ipasubgidcount=eval($SUBID_COUNT)), del=ipasubuidnumber:(!(ipasubuidnumber=*)) && ipasubuidcount:(!(ipasubuidcount=*)) && ipasubgidnumber:(!(ipasubgidnumber=*)) && ipasubgidcount:(!(ipasubgidcount=*))")(version 3.0;acl "selfservice: Add subordinate id";allow (add, write) userattr = "ipaowner#SELFDN" and groupdn="ldap:///cn=Self-service subordinate ID,cn=permissions,cn=pbac,$SUFFIX";)
7e1b55
 add: aci: (targetfilter = "(objectclass=ipasubordinateidentry)")(targetattr="description || ipaowner || ipauniqueid")(targattrfilters = "add=objectClass:(|(objectClass=top)(objectClass=ipasubordinateid)(objectClass=ipasubordinateidentry)(objectClass=ipasubordinategid)(objectClass=ipasubordinateuid)) && ipasubuidnumber:(|(ipasubuidnumber>=1)(ipasubuidnumber=-1)) && ipasubuidcount:(ipasubuidcount=eval($SUBID_COUNT)) && ipasubgidnumber:(|(ipasubgidnumber>=1)(ipasubgidnumber=-1)) && ipasubgidcount:(ipasubgidcount=eval($SUBID_COUNT)), del=ipasubuidnumber:(!(ipasubuidnumber=*)) && ipasubuidcount:(!(ipasubuidcount=*)) && ipasubgidnumber:(!(ipasubgidnumber=*)) && ipasubgidcount:(!(ipasubgidcount=*))")(version 3.0;acl "Add subordinate ids to any user";allow (add, write) groupdn="ldap:///cn=Subordinate ID Administrators,cn=privileges,cn=pbac,$SUFFIX";)
7e1b55
 
7e1b55
 # DNA plugin and idrange configuration
7e1b55
@@ -90,6 +86,7 @@ default: dnaScope: $SUFFIX
7e1b55
 default: dnaThreshold: eval($SUBID_DNA_THRESHOLD)
7e1b55
 default: dnaSharedCfgDN: cn=subordinate-ids,cn=dna,cn=ipa,cn=etc,$SUFFIX
7e1b55
 default: dnaExcludeScope: cn=provisioning,$SUFFIX
7e1b55
+default: dnaInterval: eval($SUBID_COUNT)
7e1b55
 # TODO: enable when 389-DS' DNA plugin supports dnaStepAttr
7e1b55
 # add: dnaIntervalAttr: ipasubuidcount
7e1b55
 # add: dnaIntervalAttr: ipasubgidcount
7e1b55
diff --git a/ipaserver/plugins/subid.py b/ipaserver/plugins/subid.py
7e1b55
index 7d9a2f33e84bc7cdf17900346343e49d5eda0d8c..440f24ee627f0736100f63026158c564b04520c2 100644
7e1b55
--- a/ipaserver/plugins/subid.py
7e1b55
+++ b/ipaserver/plugins/subid.py
7e1b55
@@ -2,7 +2,6 @@
7e1b55
 # Copyright (C) 2021  FreeIPA Contributors see COPYING for license
7e1b55
 #
7e1b55
 
7e1b55
-import random
7e1b55
 import uuid
7e1b55
 
7e1b55
 from ipalib import api
7e1b55
@@ -291,12 +290,8 @@ class subid(LDAPObject):
7e1b55
             _entry_attrs = ldap.get_entry(dn, ["objectclass"])
7e1b55
             entry_attrs["objectclass"] = _entry_attrs["objectclass"]
7e1b55
 
7e1b55
-        # XXX HACK, remove later
7e1b55
-        if subuid == DNA_MAGIC:
7e1b55
-            subuid = self._fake_dna_plugin(ldap, dn, entry_attrs)
7e1b55
-
7e1b55
         entry_attrs["ipasubuidnumber"] = subuid
7e1b55
-        # enforice subuid == subgid for now
7e1b55
+        # enforce subuid == subgid for now
7e1b55
         entry_attrs["ipasubgidnumber"] = subuid
7e1b55
         # hard-coded constants
7e1b55
         entry_attrs["ipasubuidcount"] = constants.SUBID_COUNT
7e1b55
@@ -350,13 +345,6 @@ class subid(LDAPObject):
7e1b55
         filters.extend(extra_filters)
7e1b55
         return ldap.combine_filters(filters, rules=ldap.MATCH_ALL)
7e1b55
 
7e1b55
-    def _fake_dna_plugin(self, ldap, dn, entry_attrs):
7e1b55
-        """XXX HACK, remove when 389-DS DNA plugin supports steps"""
7e1b55
-        return (
7e1b55
-            constants.SUBID_RANGE_START
7e1b55
-            + random.randint(1, 32764 - 2) * constants.SUBID_COUNT
7e1b55
-        )
7e1b55
-
7e1b55
 
7e1b55
 @register()
7e1b55
 class subid_add(LDAPCreate):
7e1b55
-- 
7e1b55
2.26.3
7e1b55