diff --git a/setup/class_setupStepMigrate.inc b/setup/class_setupStepMigrate.inc index 4ac1511c7d0fa642253af89ed8905df159533757..7c46ceae4b74d7f3cc63fae6960d8a96e75191df 100644 --- a/setup/class_setupStepMigrate.inc +++ b/setup/class_setupStepMigrate.inc @@ -184,10 +184,11 @@ class setupStepMigrate extends setupStep var $rootOC_details = []; /* Entries needing migration */ - protected $orgUnits_toMigrate = []; - protected $accounts_toMigrate = []; - protected $outsideUsers_toMigrate = []; - protected $outsideGroups_toMigrate = []; + protected $orgUnits_toMigrate = []; + protected $accounts_toMigrate = []; + protected $outsideUsers_toMigrate = []; + protected $outsideOGroups_toMigrate = []; + protected $outsidePosixGroups_toMigrate = []; /* check for multiple use of same uidNumber */ var $check_uidNumber = []; @@ -258,18 +259,22 @@ class setupStepMigrate extends setupStep $config->resetDepartmentCache(); $checks = [ - 'baseOC' => new StepMigrateCheck($this, 'baseOC', _('Inspecting object classes in root object')), - 'permissions' => new StepMigrateCheck($this, 'permissions', _('Checking permission for LDAP database')), - 'accounts' => new StepMigrateCheck($this, 'accounts', _('Checking for invisible users')), - 'adminAccount' => new StepMigrateCheck($this, 'adminAccount', _('Checking for super administrator')), - 'defaultACLs' => new StepMigrateCheck($this, 'defaultACLs', _('Checking for default ACL roles and groups')), - 'outsideUsers' => new StepMigrateCheck($this, 'outsideUsers', _('Checking for users outside the people tree')), - 'outsideGroups' => new StepMigrateCheck($this, 'outsideGroups', _('Checking for groups outside the groups tree')), - 'orgUnits' => new StepMigrateCheck($this, 'orgUnits', _('Checking for invisible departments')), - 'uidNumber' => new StepMigrateCheck($this, 'uidNumber', _('Checking for duplicated UID numbers')), - 'gidNumber' => new StepMigrateCheck($this, 'gidNumber', _('Checking for duplicated GID numbers')), + 'baseOC' => new StepMigrateCheck($this, 'baseOC', _('Inspecting object classes in root object')), + 'permissions' => new StepMigrateCheck($this, 'permissions', _('Checking permission for LDAP database')), + 'accounts' => new StepMigrateCheck($this, 'accounts', _('Checking for invisible users')), + 'adminAccount' => new StepMigrateCheck($this, 'adminAccount', _('Checking for super administrator')), + 'defaultACLs' => new StepMigrateCheck($this, 'defaultACLs', _('Checking for default ACL roles and groups')), + 'outsideUsers' => new StepMigrateCheck($this, 'outsideUsers', _('Checking for users outside the people tree')), + 'outsideOGroups' => new StepMigrateCheck($this, 'outsideOGroups', _('Checking for groups outside the groups tree')), + 'orgUnits' => new StepMigrateCheck($this, 'orgUnits', _('Checking for invisible departments')), ]; + if (class_available('posixAccount')) { + $checks['outsidePosixGroups'] = new StepMigrateCheck($this, 'outsidePosixGroups', _('Checking for POSIX groups outside the groups tree')); + $checks['uidNumber'] = new StepMigrateCheck($this, 'uidNumber', _('Checking for duplicated UID numbers')); + $checks['gidNumber'] = new StepMigrateCheck($this, 'gidNumber', _('Checking for duplicated GID numbers')); + } + $this->checks = $checks; } @@ -1182,25 +1187,25 @@ class setupStepMigrate extends setupStep } /* Search for groups outside the group ou */ - function check_outsideGroups (&$checkobj) + function check_outsideOGroups (&$checkobj) { - list($sizeLimitHit,$count) = $this->check_outsideObjects_generic($checkobj, '(objectClass=posixGroup)', 'groupRDN'); + list($sizeLimitHit,$count) = $this->check_outsideObjects_generic($checkobj, '(objectClass=groupOfNames)', 'ogroupRDN'); if ($count > 0) { if ($sizeLimitHit) { - $message = sprintf(_('Found more than %d groups outside the configured tree "%s".'), static::$objectNumberLimit, trim(get_ou('groupRDN'))); + $message = sprintf(_('Found more than %d groups outside the configured tree "%s".'), static::$objectNumberLimit, trim(get_ou('ogroupRDN'))); } else { - $message = sprintf(_('Found %d groups outside the configured tree "%s".'), $count, trim(get_ou('groupRDN'))); + $message = sprintf(_('Found %d groups outside the configured tree "%s".'), $count, trim(get_ou('ogroupRDN'))); } throw new CheckFailedException( - "<div style='color:#F0A500'>"._("Warning")."</div>", + '<div style="color:#F0A500">'._('Warning').'</div>', $message. $checkobj->submit() ); } } - function check_outsideGroups_migrate (&$checkobj) + function check_outsideOGroups_migrate (&$checkobj) { global $config; $this->check_multipleGeneric_migrate( @@ -1214,7 +1219,7 @@ class setupStepMigrate extends setupStep ); } - function check_outsideGroups_migrate_refresh (&$checkobj) + function check_outsideOGroups_migrate_refresh (&$checkobj) { global $config; return $this->check_multipleGeneric_migrate_refresh( @@ -1228,7 +1233,59 @@ class setupStepMigrate extends setupStep ); } - function check_outsideGroups_migrate_confirm (&$checkobj, $only_ldif = FALSE) + function check_outsideOGroups_migrate_confirm (&$checkobj, $only_ldif = FALSE) + { + return $this->check_outsideUsers_migrate_confirm($checkobj, $only_ldif, 'ogroupRDN'); + } + + /* Search for POSIX groups outside the group ou */ + function check_outsidePosixGroups (&$checkobj) + { + list($sizeLimitHit,$count) = $this->check_outsideObjects_generic($checkobj, '(objectClass=posixGroup)', 'groupRDN'); + + if ($count > 0) { + if ($sizeLimitHit) { + $message = sprintf(_('Found more than %d POSIX groups outside the configured tree "%s".'), static::$objectNumberLimit, trim(get_ou('groupRDN'))); + } else { + $message = sprintf(_('Found %d POSIX groups outside the configured tree "%s".'), $count, trim(get_ou('groupRDN'))); + } + throw new CheckFailedException( + '<div style="color:#F0A500">'._('Warning').'</div>', + $message. + $checkobj->submit() + ); + } + } + + function check_outsidePosixGroups_migrate (&$checkobj) + { + global $config; + $this->check_multipleGeneric_migrate( + $checkobj, + [ + 'title' => _('Move POSIX groups into configured groups tree'), + 'outside' => TRUE, + 'ous' => $config->getDepartmentList(), + 'destination' => (isset($_POST['destination']) ? $_POST['destination'] : ''), + ] + ); + } + + function check_outsidePosixGroups_migrate_refresh (&$checkobj) + { + global $config; + return $this->check_multipleGeneric_migrate_refresh( + $checkobj, + [ + 'title' => _('Move POSIX groups into configured groups tree'), + 'outside' => TRUE, + 'ous' => $config->getDepartmentList(), + 'destination' => (isset($_POST['destination']) ? $_POST['destination'] : ''), + ] + ); + } + + function check_outsidePosixGroups_migrate_confirm (&$checkobj, $only_ldif = FALSE) { return $this->check_outsideUsers_migrate_confirm($checkobj, $only_ldif, 'groupRDN'); }