From 8322a775896d6d365348611cf16559574335e32a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=B4me=20Bernigaud?= <come.bernigaud@opensides.be>
Date: Mon, 1 Sep 2014 16:15:17 +0200
Subject: [PATCH] Fixes: #2919 By passing ACL system using a fake_userinfo
 class

Also fixed an error in check_defaultACLs
---
 html/setup.php                    |  2 ++
 setup/class_setup.inc             | 19 +++++++++++++++++++
 setup/class_setupStep.inc         | 26 --------------------------
 setup/class_setupStep_Migrate.inc |  4 +++-
 4 files changed, 24 insertions(+), 27 deletions(-)

diff --git a/html/setup.php b/html/setup.php
index 3b4271ae4..ecac71018 100644
--- a/html/setup.php
+++ b/html/setup.php
@@ -101,6 +101,8 @@ if (!session::global_is_set('config')) {
 $config = session::global_get('config');
 load_plist(FALSE);
 IconTheme::loadThemes('themes');
+/* Fake user bypassing acl system */
+$ui = new fake_userinfo();
 /* Call setup */
 $display = "";
 require_once("../setup/main.inc");
diff --git a/setup/class_setup.inc b/setup/class_setup.inc
index 086b42ee7..7e92a630c 100644
--- a/setup/class_setup.inc
+++ b/setup/class_setup.inc
@@ -22,6 +22,25 @@
 
 require_once("class_setupStep.inc");
 
+class fake_userinfo extends userinfo
+{
+  function __construct()
+  {
+    global $config;
+    $this->config = &$config;
+
+    $this->cn   = 'fake_cn';
+    $this->dn   = 'fake_dn';
+    $this->uid  = 'fake_uid';
+    $this->ip   = $_SERVER['REMOTE_ADDR'];
+
+    /* This fake user have all rights */
+    $this->ignoreACL = TRUE;
+
+    /* Initialize ACL_CACHE */
+    $this->reset_acl_cache();
+  }
+}
 
 class setup
 {
diff --git a/setup/class_setupStep.inc b/setup/class_setupStep.inc
index 21af134c9..6756ec225 100644
--- a/setup/class_setupStep.inc
+++ b/setup/class_setupStep.inc
@@ -102,32 +102,6 @@ class setupStep extends simplePlugin
     return $tmp;
   }
 
-  /* bypass acl system as there is no user login */
-  function acl_is_writeable($attribute, $skip_write = FALSE)
-  {
-    return TRUE;
-  }
-  function acl_is_readable($attribute)
-  {
-    return TRUE;
-  }
-  function acl_is_createable($base = "")
-  {
-    return TRUE;
-  }
-  function acl_is_removeable($base = "")
-  {
-    return TRUE;
-  }
-  function acl_is_moveable($base = "")
-  {
-    return TRUE;
-  }
-  function getacl($attribute, $skip_write = FALSE)
-  {
-    return 'cmdrw';
-  }
-
   /* bypass LDAP loading */
   protected function loadAttributes()
   {
diff --git a/setup/class_setupStep_Migrate.inc b/setup/class_setupStep_Migrate.inc
index efb42d220..7b1d4b106 100644
--- a/setup/class_setupStep_Migrate.inc
+++ b/setup/class_setupStep_Migrate.inc
@@ -968,6 +968,8 @@ class Step_Migrate extends setupStep
       $dn = 'cn='.$role['cn'].','.get_ou('aclRoleRDN').$config->current['BASE'];
       $ldap->cat($dn);
       if ($ldap->count() == 0) {
+        $ldap->cd($config->current['BASE']);
+        $ldap->create_missing_trees(get_ou('aclRoleRDN').$config->current['BASE']);
         $ldap->cd($dn);
         $ldap->add($role);
         if (!$ldap->success()) {
@@ -975,7 +977,7 @@ class Step_Migrate extends setupStep
             _('Migration error'),
             sprintf(
               _('Cannot add ACL role "%s":').'<br/><br/><i>%s</i>',
-              LDAP::fix($roledn), $ldap->get_error()
+              LDAP::fix($dn), $ldap->get_error()
             ),
             ERROR_DIALOG
           );
-- 
GitLab