pgreco / rpms / ipa

Forked from forks/areguera/rpms/ipa 4 years ago
Clone

Blame SOURCES/0069-Upgrade-add-gidnumber-to-trusted-domain-entry.patch

483b06
From 54422d3c58ace8496b0bd2fc536365159e6666e6 Mon Sep 17 00:00:00 2001
483b06
From: Florence Blanc-Renaud <flo@redhat.com>
483b06
Date: Mon, 3 Apr 2017 15:57:47 +0200
483b06
Subject: [PATCH] Upgrade: add gidnumber to trusted domain entry
483b06
483b06
The trusted domain entries created in earlier versions are missing gidnumber.
483b06
During upgrade, a new plugin will read the gidnumber of the fallback group
483b06
cn=Default SMB Group and add this value to trusted domain entries which do
483b06
not have a gidNumber.
483b06
483b06
https://pagure.io/freeipa/issue/6827
483b06
483b06
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
483b06
---
483b06
 install/updates/90-post_upgrade_plugins.update |  1 +
483b06
 ipaserver/install/plugins/adtrust.py           | 56 ++++++++++++++++++++++++++
483b06
 2 files changed, 57 insertions(+)
483b06
483b06
diff --git a/install/updates/90-post_upgrade_plugins.update b/install/updates/90-post_upgrade_plugins.update
483b06
index 34069e7457dd9690a14c5c055c6d05ad76004d16..8477199e07d6729d5847e58bfa67d061bd1410c2 100644
483b06
--- a/install/updates/90-post_upgrade_plugins.update
483b06
+++ b/install/updates/90-post_upgrade_plugins.update
483b06
@@ -10,6 +10,7 @@ plugin: update_sigden_extdom_broken_config
483b06
 plugin: update_sids
483b06
 plugin: update_default_range
483b06
 plugin: update_default_trust_view
483b06
+plugin: update_tdo_gidnumber
483b06
 plugin: update_ca_renewal_master
483b06
 plugin: update_idrange_type
483b06
 plugin: update_pacs
483b06
diff --git a/ipaserver/install/plugins/adtrust.py b/ipaserver/install/plugins/adtrust.py
483b06
index 42968089f547f61edd2f1223d088a22762a33b70..075f197780edc2aadf42fa82b71e9e2b29e66ea9 100644
483b06
--- a/ipaserver/install/plugins/adtrust.py
483b06
+++ b/ipaserver/install/plugins/adtrust.py
483b06
@@ -22,6 +22,7 @@ from ipalib import Updater
483b06
 from ipapython.dn import DN
483b06
 from ipapython.ipa_log_manager import root_logger
483b06
 from ipaserver.install import sysupgrade
483b06
+from ipaserver.install.adtrustinstance import ADTRUSTInstance
483b06
 
483b06
 register = Registry()
483b06
 
483b06
@@ -316,3 +317,58 @@ class update_sids(Updater):
483b06
 
483b06
         sysupgrade.set_upgrade_state('sidgen', 'update_sids', False)
483b06
         return False, ()
483b06
+
483b06
+
483b06
+@register()
483b06
+class update_tdo_gidnumber(Updater):
483b06
+    """
483b06
+    Create a gidNumber attribute for Trusted Domain Objects.
483b06
+
483b06
+    The value is taken from the fallback group defined in cn=Default SMB Group.
483b06
+    """
483b06
+    def execute(self, **options):
483b06
+        ldap = self.api.Backend.ldap2
483b06
+
483b06
+        # Read the gidnumber of the fallback group
483b06
+        dn = DN(('cn', ADTRUSTInstance.FALLBACK_GROUP_NAME),
483b06
+                self.api.env.container_group,
483b06
+                self.api.env.basedn)
483b06
+
483b06
+        try:
483b06
+            entry = ldap.get_entry(dn, ['gidnumber'])
483b06
+            gidNumber = entry.get('gidnumber')
483b06
+        except errors.NotFound:
483b06
+            self.log.error("{0} not found".format(
483b06
+                ADTRUSTInstance.FALLBACK_GROUP_NAME))
483b06
+            return False, ()
483b06
+
483b06
+        if not gidNumber:
483b06
+            self.log.error("{0} does not have a gidnumber".format(
483b06
+                ADTRUSTInstance.FALLBACK_GROUP_NAME))
483b06
+            return False, ()
483b06
+
483b06
+        # For each trusted domain object, add gidNumber
483b06
+        try:
483b06
+            tdos = ldap.get_entries(
483b06
+                DN(self.api.env.container_adtrusts, self.api.env.basedn),
483b06
+                scope=ldap.SCOPE_ONELEVEL,
483b06
+                filter="(objectclass=ipaNTTrustedDomain)",
483b06
+                attrs_list=['gidnumber'])
483b06
+            for tdo in tdos:
483b06
+                # if the trusted domain object does not contain gidnumber,
483b06
+                # add the default fallback group gidnumber
483b06
+                if not tdo.get('gidnumber'):
483b06
+                    try:
483b06
+                        tdo['gidnumber'] = gidNumber
483b06
+                        ldap.update_entry(tdo)
483b06
+                        self.log.debug("Added gidnumber {0} to {1}".format(
483b06
+                            gidNumber, tdo.dn))
483b06
+                    except Exception:
483b06
+                        self.log.warning(
483b06
+                            "Failed to add gidnumber to {0}".format(tdo.dn))
483b06
+
483b06
+        except errors.NotFound:
483b06
+            self.log.debug("No trusted domain object to update")
483b06
+            return False, ()
483b06
+
483b06
+        return False, ()
483b06
-- 
483b06
2.9.3
483b06