From ea15a073ec1e1a25f5cda9bf58c8614c6bd3be4a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=B4me=20Bernigaud?= <come.bernigaud@opensides.be>
Date: Tue, 2 Sep 2014 10:55:27 +0200
Subject: [PATCH] Fixes #2919 Implemented admin role and user creation

---
 setup/class_setupStep_Migrate.inc | 41 +++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/setup/class_setupStep_Migrate.inc b/setup/class_setupStep_Migrate.inc
index 7b1d4b106..5e7a29ad1 100644
--- a/setup/class_setupStep_Migrate.inc
+++ b/setup/class_setupStep_Migrate.inc
@@ -891,6 +891,29 @@ class Step_Migrate extends setupStep
 
   function check_adminAccount_migrate_confirm(&$checkobj)
   {
+    global $config;
+    session::global_set('CurrentMainBase', $config->current['BASE']);
+
+    /* Creating role */
+    $ldap = $config->get_ldap_link();
+
+    $ldap->cd($config->current['BASE']);
+    $ldap->search('(&(objectClass=gosaRole)(gosaAclTemplate=*:all;cmdrw))', array('dn'));
+    if ($attrs = $ldap->fetch()) {
+      $roledn = $attrs['dn'];
+    } else {
+      $tabObject  = objects::create('aclRole');
+      $baseObject = $tabObject->getBaseObject();
+
+      $baseObject->cn               = 'admin';
+      $baseObject->description      = _('Gives all rights on all objects');
+      $baseObject->gosaAclTemplate  = array(array('all' => array('0' => 'cmdrw')));
+
+      $tabObject->save();
+      $roledn = $tabObject->dn;
+    }
+
+    /* Creating user */
     $tabObject = objects::create('user');
     $_POST['givenName']                   = 'System';
     $_POST['sn']                          = 'Administrator';
@@ -905,6 +928,24 @@ class Step_Migrate extends setupStep
       return FALSE;
     }
     $tabObject->save();
+    $admindn = $tabObject->dn;
+
+    /* Assigning role */
+    $tabObject  = objects::open($config->current['BASE'], 'aclAssignment');
+    $baseObject = $tabObject->getBaseObject();
+
+    $assignments = $baseObject->gosaAclEntry;
+    array_unshift(
+      $assignments,
+      array(
+        'scope'   => 'subtree',
+        'role'    => $roledn,
+        'members' => array($admindn),
+      )
+    );
+    $baseObject->gosaAclEntry = $assignments;
+    $tabObject->save();
+
     return TRUE;
   }
 
-- 
GitLab