diff --git a/.phpcs-ruleset-pure.xml b/.phpcs-ruleset-pure.xml index 476e34d19..fe8bbfb6c 100644 --- a/.phpcs-ruleset-pure.xml +++ b/.phpcs-ruleset-pure.xml @@ -22,4 +22,7 @@ + + + diff --git a/CHANGELOG.md b/CHANGELOG.md index 28fb6dc5e..85e61d36b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ For details on the changes in each release, see [the Releases page](https://gith ## Version-specific update instructions: +### 1.8 -> 1.9 +- schema migration: + - the new LDAP schema should be added in conjunction with the old + - all entries should have the `piGroup` objectClass replaced with `unityGroup` + - the `setup-pi-group-owners.php` worker should be run +- all existing PI group requests in SQL must be converted to the format "owner_uid:group_gid" +- ownership of any course groups should be transferred to a Unity admin +- dummy course group owners should be deleted + ### 1.7 -> 1.8 - the [webhook] section of the config file can be removed - all mail templates are no longer PHP files, now they are `.html.twig` diff --git a/deployment/domain_overrides/course-creator/config.ini b/deployment/domain_overrides/course-creator/config.ini index 06847b570..2545380c0 100644 --- a/deployment/domain_overrides/course-creator/config.ini +++ b/deployment/domain_overrides/course-creator/config.ini @@ -1,6 +1,5 @@ -# we have hacked in course groups using normal PI accounts but using a different IDnumber range +# we have hacked in course groups using normal PI groups but using a different IDnumber range [ldap] -offset_UIDGID = 20000 offset_PIGID = 20000 [site] diff --git a/resources/init.php b/resources/init.php index b3f74cf9e..1ce8e543e 100644 --- a/resources/init.php +++ b/resources/init.php @@ -80,7 +80,7 @@ } $_SESSION["user_exists"] = $USER->exists() && !$USER->getFlag(UserFlag::DISABLED); - $_SESSION["is_pi"] = $USER->isPI(); + $_SESSION["owned_managed_pi_group_gids"] = $USER->getOwnedPIGroupGIDs(); $days_idle = $SQL->convertLastLoginToDaysIdle($SQL->getUserLastLogin($USER->uid)); $SQL->addLog("user_login", $OPERATOR->uid); diff --git a/resources/lib/UnityGroup.php b/resources/lib/UnityGroup.php index f30b97659..435c613b6 100644 --- a/resources/lib/UnityGroup.php +++ b/resources/lib/UnityGroup.php @@ -17,7 +17,7 @@ enum UnityGroupUserRemovedReason: string */ class UnityGroup extends PosixGroup { - public const string PI_PREFIX = "pi_"; + public const string NAMESAKE_PI_PREFIX = "pi_"; public string $gid; private UnityLDAP $LDAP; private UnitySQL $SQL; @@ -37,21 +37,25 @@ public function __toString(): string return $this->gid; } - public function requestGroup(?bool $send_mail_to_admins = null, bool $send_mail = true): void - { + public function requestGroup( + string $owner_uid, + ?bool $send_mail_to_admins = null, + bool $send_mail = true, + ): void { $send_mail_to_admins ??= CONFIG["mail"]["send_pimesg_to_admins"]; if ($this->exists() && !$this->getIsDisabled()) { return; } + $owner = new UnityUser($owner_uid, $this->LDAP, $this->SQL, $this->MAILER); $context = [ - "user" => $this->getOwner()->uid, - "org" => $this->getOwner()->getOrg(), - "name" => $this->getOwner()->getFullName(), - "email" => $this->getOwner()->getMail(), + "user" => $owner_uid, + "org" => $owner->getOrg(), + "name" => $owner->getFullName(), + "email" => $owner->getMail(), ]; - $this->SQL->addRequest($this->getOwner()->uid, UnitySQL::REQUEST_BECOME_PI); + $this->SQL->addRequest("$owner_uid:$this->gid", UnitySQL::REQUEST_CREATE_PI_GROUP); if ($send_mail) { - $this->MAILER->sendMail($this->getOwner()->getMail(), "group_request"); + $this->MAILER->sendMail($owner->getMail(), "group_request"); if ($send_mail_to_admins) { $this->MAILER->sendMail("admin", "group_request_admin", $context); } @@ -117,52 +121,59 @@ private function reenable(bool $send_mail = true): void /** * This method will create the group (this is what is executed when an admin approved the group) */ - public function approveGroup(bool $send_mail = true): void + public function approveGroup(string $owner_uid, bool $send_mail = true): void { - $uid = $this->getOwner()->uid; - $request = $this->SQL->getRequest($uid, UnitySQL::REQUEST_BECOME_PI); - assert($this->getOwner()->exists()); + $request = "$owner_uid:$this->gid"; + assert($this->SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP)); + $owner = new UnityUser($owner_uid, $this->LDAP, $this->SQL, $this->MAILER); + assert($owner->exists()); if (!$this->entry->exists()) { - $this->init(); + $this->init($owner_uid); } elseif ($this->getIsDisabled()) { $this->reenable(); } else { throw new Exception("cannot approve group that already exists and is not disabled"); } - $this->SQL->removeRequest($this->getOwner()->uid, UnitySQL::REQUEST_BECOME_PI); - $this->SQL->addLog("approved_group", $this->getOwner()->uid); + $this->SQL->removeRequest($request, UnitySQL::REQUEST_CREATE_PI_GROUP); + $this->SQL->addLog("approved_group", $request); if ($send_mail) { - $this->MAILER->sendMail($this->getOwner()->getMail(), "group_created"); + $this->MAILER->sendMail($owner->getMail(), "group_created"); } // having your own group makes you qualified - $this->getOwner()->updateIsQualified($send_mail); + $owner->updateIsQualified($send_mail); } /** * This method is executed when an admin denys the PI group request */ - public function denyGroup(bool $send_mail = true): void + public function denyGroup(string $owner_uid, bool $send_mail = true): void { - $request = $this->SQL->getRequest($this->getOwner()->uid, UnitySQL::REQUEST_BECOME_PI); - $this->SQL->removeRequest($this->getOwner()->uid, UnitySQL::REQUEST_BECOME_PI); + $request = "$owner_uid:$this->gid"; + assert($this->SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP)); + $owner = new UnityUser($owner_uid, $this->LDAP, $this->SQL, $this->MAILER); + assert($owner->exists()); + $this->SQL->removeRequest($request, UnitySQL::REQUEST_CREATE_PI_GROUP); if ($this->exists()) { return; } - $this->SQL->addLog("denied_group", $this->getOwner()->uid); + $this->SQL->addLog("denied_group", $owner_uid); if ($send_mail) { - $this->MAILER->sendMail($this->getOwner()->getMail(), "group_denied"); + $this->MAILER->sendMail($owner->getMail(), "group_denied"); } } - public function cancelGroupRequest(bool $send_mail = true): void + public function cancelGroupRequest(string $owner_uid, bool $send_mail = true): void { - if (!$this->SQL->requestExists($this->getOwner()->uid, UnitySQL::REQUEST_BECOME_PI)) { + $request = "$owner_uid:$this->gid"; + if (!$this->SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP)) { return; } - $this->SQL->removeRequest($this->getOwner()->uid, UnitySQL::REQUEST_BECOME_PI); + $owner = new UnityUser($owner_uid, $this->LDAP, $this->SQL, $this->MAILER); + assert($owner->exists()); + $this->SQL->removeRequest($request, UnitySQL::REQUEST_CREATE_PI_GROUP); if ($send_mail) { $this->MAILER->sendMail("pi_approve", "group_request_cancelled", [ - "uid" => $this->getOwner()->uid, + "uid" => $owner_uid, ]); } } @@ -346,15 +357,15 @@ public function requestExists(UnityUser $user): bool return false; } - private function init(): void + private function init(string $owner_uid): void { - $owner = $this->getOwner(); assert(!$this->entry->exists()); $nextGID = $this->LDAP->getNextPIGIDNumber(); $this->entry->create([ - "objectclass" => ["piGroup", "posixGroup", "top"], + "objectclass" => ["unityGroup", "posixGroup", "top"], "gidnumber" => strval($nextGID), - "memberuid" => [$owner->uid], + "memberuid" => [$owner_uid], + "owneruid" => $owner_uid, ]); // TODO if we ever make this project based, // we need to update the cache here with the memberuid @@ -367,25 +378,21 @@ private function addRequest(string $uid): void public function getOwner(): UnityUser { - return new UnityUser( - self::GID2OwnerUID($this->gid), - $this->LDAP, - $this->SQL, - $this->MAILER, - ); + $uid = $this->entry->getAttribute("ownerUid")[0]; + return new UnityUser($uid, $this->LDAP, $this->SQL, $this->MAILER); } - public static function ownerUID2GID(string $uid): string + public static function ownerUID2NamesakeGID(string $uid): string { - return self::PI_PREFIX . $uid; + return self::NAMESAKE_PI_PREFIX . $uid; } - public static function GID2OwnerUID(string $gid): string + public static function NamesakeGID2OwnerUID(string $gid): string { - if (substr($gid, 0, strlen(self::PI_PREFIX)) != self::PI_PREFIX) { + if (substr($gid, 0, strlen(self::NAMESAKE_PI_PREFIX)) != self::NAMESAKE_PI_PREFIX) { throw new Exception("PI group GID doesn't have the correct prefix."); } - return substr($gid, strlen(self::PI_PREFIX)); + return substr($gid, strlen(self::NAMESAKE_PI_PREFIX)); } /** @@ -480,7 +487,7 @@ public function addPlusAddressToMail(string $mail): string $owner = $this->getOwner(); $suffix = "_" . $owner->getOrg(); assert(str_ends_with($owner->uid, $suffix)); - $short_name = substr($owner->uid, 0, -1 * strlen($suffix)); + $short_name = substr($owner->uid, 0, -(1 * strlen($suffix))); $parts = explode("@", $mail, 2); return sprintf("%s+%s@%s", $parts[0], $short_name, $parts[1]); } diff --git a/resources/lib/UnityLDAP.php b/resources/lib/UnityLDAP.php index 36eb5833a..19acc9128 100644 --- a/resources/lib/UnityLDAP.php +++ b/resources/lib/UnityLDAP.php @@ -236,12 +236,31 @@ public function getPIGroupGIDsWithManagerUID( ); } + /** @return string[] */ + public function getPIGroupGIDsWithOwnerUID( + string $uid, + string $base_filter = self::NON_DISABLED, + ): array { + return array_map( + fn($x) => $x["cn"][0], + $this->pi_groupOU->getChildrenArrayStrict( + ["cn"], + recursive: false, + filter: sprintf( + "(&(owneruid=%s)%s)", + ldap_escape($uid, flags: LDAP_ESCAPE_FILTER), + $base_filter, + ), + ), + ); + } + /** @return string[] */ public function getPIGroupOwnerUIDs(string $filter = self::NON_DISABLED): array { return array_map( - fn($x) => UnityGroup::GID2OwnerUID((string) $x["cn"][0]), - $this->getPIGroupsAttributes(["cn"], filter: $filter), + fn($x) => (string) $x["owneruid"][0], + $this->getPIGroupsAttributes(["ownerUid"], filter: $filter), ); } diff --git a/resources/lib/UnitySQL.php b/resources/lib/UnitySQL.php index b65b80192..6c331b26c 100644 --- a/resources/lib/UnitySQL.php +++ b/resources/lib/UnitySQL.php @@ -14,8 +14,9 @@ class UnitySQL private const string TABLE_AUDIT_LOG = "audit_log"; private const string TABLE_USER_LAST_LOGINS = "user_last_logins"; // FIXME this string should be changed to something more intuitive, requires production change - public const string REQUEST_BECOME_PI = "admin"; + public const string REQUEST_CREATE_PI_GROUP = "admin"; private const int TABLE_AUDIT_LOG_RECIPIENT_MAX_MB_STR_LEN = 768; + // FIXME the `uid` column should use a more generic name since it can now conatin "uid:gid" private PDO $conn; diff --git a/resources/lib/UnityUser.php b/resources/lib/UnityUser.php index a2b7db682..d8ddf753a 100644 --- a/resources/lib/UnityUser.php +++ b/resources/lib/UnityUser.php @@ -362,18 +362,27 @@ public function getHomeDir(): string return $this->entry->getAttribute("homedirectory")[0]; } - /** - * Checks if current user is a PI - */ + /** @return string[] */ + public function getOwnedPIGroupGIDs(): array + { + return $this->LDAP->getPIGroupGIDsWithOwnerUID($this->uid); + } + + /** @return string[] */ + public function getManagedPIGroupGIDs(): array + { + return $this->LDAP->getPIGroupGIDsWithManagerUID($this->uid); + } + public function isPI(): bool { - return $this->getPIGroup()->exists() && !$this->getPIGroup()->getIsDisabled(); + return $this->getNamesakePIGroup()->exists(); } - public function getPIGroup(): UnityGroup + public function getNamesakePIGroup(): UnityGroup { return new UnityGroup( - UnityGroup::ownerUID2GID($this->uid), + UnityGroup::ownerUID2NamesakeGID($this->uid), $this->LDAP, $this->SQL, $this->MAILER, @@ -418,7 +427,7 @@ public function disable( bool $send_mail_pi_group_owner = true, bool $send_mail_admin = true, ): void { - $pi_group = $this->getPIGroup(); + $pi_group = $this->getNamesakePIGroup(); if ($pi_group->exists() && !$pi_group->getIsDisabled()) { $pi_group->disable($send_mail); } diff --git a/resources/templates/header.html.twig b/resources/templates/header.html.twig index c37b539d4..d0e3fc394 100644 --- a/resources/templates/header.html.twig +++ b/resources/templates/header.html.twig @@ -72,9 +72,13 @@ {{ getRelativeHyperlink('Account Settings', 'panel/account.php')|raw }} {{ getRelativeHyperlink('My PIs', 'panel/groups.php')|raw }} - {% if is_pi %} - {{ getRelativeHyperlink('My Users', 'panel/pi.php')|raw }} - {% endif %} + {% for gid in owned_managed_pi_group_gids %} + {% if uid in gid %} + {{ getRelativeHyperlink('My Users', 'panel/pi.php')|raw }} + {% else %} + {{ getRelativeHyperlink('PI Group ' ~ (gid|e), 'panel/pi.php?gid=' ~ (gid|e))|raw }} + {% endif %} + {% endfor %} {% for label in CONFIG['menuitems_secure']['labels'] %} {{ label }} diff --git a/resources/templates/header.php b/resources/templates/header.php index 3f2f4be8b..b5b2e7ffc 100644 --- a/resources/templates/header.php +++ b/resources/templates/header.php @@ -40,6 +40,7 @@ "messages" => UnityHTTPD::getMessages(), "viewUser" => $_SESSION["viewUser"] ?? null, "user_exists" => $_SESSION["user_exists"] ?? false, - "is_pi" => $_SESSION["is_pi"] ?? false, + "uid" => $_SESSION["SSO"]["user"] ?? null, + "owned_managed_pi_group_gids" => $_SESSION["owned_managed_pi_group_gids"] ?? [], "is_admin" => $_SESSION["is_admin"] ?? false ]); diff --git a/test/functional/ExpiryWorkerTest.php b/test/functional/ExpiryWorkerTest.php index 1db247a80..c54452842 100644 --- a/test/functional/ExpiryWorkerTest.php +++ b/test/functional/ExpiryWorkerTest.php @@ -59,7 +59,7 @@ public function testExpiryWorker(string $nickname, string $mail, bool $is_pi) $this->assertFalse($USER->getFlag(UserFlag::IDLELOCKED)); $this->assertFalse($USER->getFlag(UserFlag::DISABLED)); if ($is_pi) { - $this->assertFalse($USER->getPIGroup()->getIsDisabled()); + $this->assertFalse($USER->getNamesakePIGroup()->getIsDisabled()); } // see deployment/overrides/phpunit/config/config.ini $this->assertEquals(CONFIG["expiry"]["idlelock_warning_days"], [2, 3]); @@ -122,7 +122,7 @@ public function testExpiryWorker(string $nickname, string $mail, bool $is_pi) $this->assertTrue($USER->getFlag(UserFlag::DISABLED)); $this->assertEmpty($USER->getSSHKeys()); if ($is_pi) { - $this->assertTrue($USER->getPIGroup()->getIsDisabled()); + $this->assertTrue($USER->getNamesakePIGroup()->getIsDisabled()); } // 9 /////////////////////////////////////////////////////////////////////////////////// $output = $this->runExpiryWorker(idle_days: 9); @@ -132,8 +132,8 @@ public function testExpiryWorker(string $nickname, string $mail, bool $is_pi) if ($USER->getFlag(UserFlag::DISABLED)) { $USER->reEnable(); } - if ($is_pi && $USER->getPIGroup()->getIsDisabled()) { - callPrivateMethod($USER->getPIGroup(), "reenable"); + if ($is_pi && $USER->getNamesakePIGroup()->getIsDisabled()) { + callPrivateMethod($USER->getNamesakePIGroup(), "reenable"); } callPrivateMethod($USER, "setSSHKeys", $ssh_keys_before); } @@ -214,7 +214,7 @@ public function testGroupMembersNotified() $member = $USER; $this->switchUser("EmptyPIGroupOwner"); $owner = $USER; - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); try { $owner->setFlag(UserFlag::IDLELOCKED, true); $pi_group->newUserRequest($member, false); @@ -239,7 +239,7 @@ public function testGroupMembersNotified() "idle_days" => 7, "expiration_date" => "1970/01/10", "is_final_warning" => true, - "pi_group_gid" => $owner->getPIGroup()->gid, + "pi_group_gid" => $owner->getNamesakePIGroup()->gid, ]), "user_expiry_disable_warning_member", '["' . $member->getMail() . '"]', @@ -248,7 +248,7 @@ public function testGroupMembersNotified() "idle_days" => 7, "expiration_date" => "1970/01/10", "is_final_warning" => true, - "pi_group_gid" => $owner->getPIGroup()->gid, + "pi_group_gid" => $owner->getNamesakePIGroup()->gid, ]), ), $output, @@ -266,7 +266,7 @@ public function testGroupOwnerManagersNotified() global $USER, $LDAP, $SQL, $MAILER; $this->switchUser("EmptyPIGroupOwner"); $owner = $USER; - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $this->assertEmpty($pi_group->getManagerUIDs()); $manager_uid = self::$NICKNAME2UID["Admin"]; $manager = new UnityUser($manager_uid, $LDAP, $SQL, $MAILER); @@ -291,10 +291,7 @@ public function testGroupOwnerManagersNotified() "idle-locking user '%s'\nsending %s email to %s with data %s", $member->uid, "group_user_idlelocked_owner", - _json_encode([ - $pi_group->addPlusAddressToMail($manager->getMail()), - $owner->getMail(), - ]), + _json_encode([$manager->getMail(), $owner->getMail()]), _json_encode([ "group" => $pi_group->gid, "user" => $member->uid, diff --git a/test/functional/PIBecomeRequestTest.php b/test/functional/PIBecomeRequestTest.php index ff457db2c..dca78f975 100644 --- a/test/functional/PIBecomeRequestTest.php +++ b/test/functional/PIBecomeRequestTest.php @@ -4,6 +4,7 @@ use UnityWebPortal\lib\UnitySQL; use UnityWebPortal\lib\UserFlag; use UnityWebPortal\lib\UnityHTTPD; +use UnityWebPortal\lib\UnityGroup; class PIBecomeRequestTest extends UnityWebPortalTestCase { @@ -27,11 +28,12 @@ private function cancelRequestGroupCreation() ]); } - private function approveGroup($uid) + private function approveGroup($uid, $gid) { $this->http_post(__DIR__ . "/../../webroot/admin/pi-mgmt.php", [ "form_type" => "req", "action" => "Approve", + "pi" => $gid, "uid" => $uid, ]); } @@ -40,6 +42,8 @@ public function testRequestBecomePi() { global $USER, $SQL; $this->switchUser("Blank"); + $gid = UnityGroup::ownerUID2NamesakeGID($USER->uid); + $request = "$USER->uid:$gid"; $this->assertNumberPiBecomeRequests(0); try { $this->http_post(__DIR__ . "/../../webroot/panel/account.php", [ @@ -69,8 +73,8 @@ public function testRequestBecomePi() ); $this->assertNumberPiBecomeRequests(1); } finally { - if ($SQL->requestExists($USER, UnitySQL::REQUEST_BECOME_PI)) { - $SQL->removeRequest($USER->uid, UnitySQL::REQUEST_BECOME_PI); + if ($SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP)) { + $SQL->removeRequest($request, UnitySQL::REQUEST_CREATE_PI_GROUP); } } } @@ -79,7 +83,7 @@ public function testApprovePI() { global $USER, $SSO, $LDAP, $SQL, $MAILER; $this->switchUser("Blank"); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); try { $this->requestGroupCreation(); $this->assertRequestedPIGroup(true); @@ -97,7 +101,7 @@ public function testApprovePI() $approve_uid = $SSO["user"]; $this->switchUser("Admin"); - $this->approveGroup($approve_uid); + $this->approveGroup($approve_uid, $pi_group->gid); $this->switchUser("Blank", validate: false); $this->assertRequestedPIGroup(false); @@ -120,13 +124,13 @@ public function testReenableGroup() $this->switchUser("ReenabledOwnerOfDisabledPIGroup"); $this->assertFalse($USER->isPI()); $user = $USER; - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $approve_uid = $USER->uid; try { $this->requestGroupCreation(); $this->assertRequestedPIGroup(true); $this->switchUser("Admin"); - $this->approveGroup($approve_uid); + $this->approveGroup($approve_uid, $pi_group->gid); $this->assertTrue($user->isPI()); } finally { if ($pi_group->memberUIDExists($approve_uid)) { @@ -141,24 +145,26 @@ public function testDenyPiBecomeRequest() { global $USER, $LDAP, $SQL, $MAILER; $this->switchUser("Blank"); - $piGroup = $USER->getPIGroup(); + $uid = $USER->uid; + $piGroup = $USER->getNamesakePIGroup(); $this->assertFalse($piGroup->exists()); - $this->assertFalse($SQL->requestExists($USER->uid, UnitySQL::REQUEST_BECOME_PI)); - $piGroup->requestGroup(); + $request = "$USER->uid:$piGroup->gid"; + $this->assertFalse($SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP)); + $piGroup->requestGroup($USER->uid); try { - $this->assertTrue($SQL->requestExists($USER->uid, UnitySQL::REQUEST_BECOME_PI)); + $this->assertTrue($SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP)); $this->switchUser("Admin"); $this->http_post(__DIR__ . "/../../webroot/admin/pi-mgmt.php", [ "form_type" => "req", "action" => "Deny", - "uid" => $piGroup->getOwner()->uid, + "uid" => $uid, + "pi" => $piGroup->gid, ]); - $this->switchBackUser(); $this->assertFalse($piGroup->exists()); - $this->assertFalse($SQL->requestExists($USER->uid, UnitySQL::REQUEST_BECOME_PI)); + $this->assertFalse($SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP)); } finally { - if ($SQL->requestExists($USER->uid, UnitySQL::REQUEST_BECOME_PI)) { - $SQL->removeRequest($USER->uid, UnitySQL::REQUEST_BECOME_PI); + if ($SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP)) { + $SQL->removeRequest($request, UnitySQL::REQUEST_CREATE_PI_GROUP); } } } diff --git a/test/functional/PIDisableTest.php b/test/functional/PIDisableTest.php index 788ae5a44..5d775859e 100644 --- a/test/functional/PIDisableTest.php +++ b/test/functional/PIDisableTest.php @@ -9,7 +9,7 @@ public function testDisableGroupByAdmin() { global $USER, $LDAP; $this->switchUser("EmptyPIGroupOwner"); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $memberuids_before = $pi_group->getMemberUIDs(); $this->assertFalse($pi_group->getIsDisabled()); $this->assertNotEmpty($pi_group->getMemberUIDs()); @@ -36,7 +36,7 @@ public function testDisableGroupByOwner() { global $USER, $LDAP; $this->switchUser("EmptyPIGroupOwner"); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $memberuids_before = $pi_group->getMemberUIDs(); $this->assertFalse($pi_group->getIsDisabled()); $this->assertNotEmpty($pi_group->getMemberUIDs()); @@ -85,7 +85,7 @@ public function testMemberBecomesUnqualified() $new_user = $USER; $this->assertFalse($new_user->getFlag(UserFlag::QUALIFIED)); $this->switchUser("EmptyPIGroupOwner"); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $memberuids_before = $pi_group->getMemberUIDs(); try { $pi_group->newUserRequest($new_user); @@ -113,7 +113,7 @@ public function testPICannotDisableIfMembersExist() $new_user = $USER; $this->assertFalse($new_user->getFlag(UserFlag::QUALIFIED)); $this->switchUser("EmptyPIGroupOwner"); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $memberuids_before = $pi_group->getMemberUIDs(); try { $pi_group->newUserRequest($new_user); @@ -141,7 +141,7 @@ public function testGetDisabledSetDisabled() { global $USER, $LDAP; $this->switchUser("NormalPI"); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $entry = $LDAP->getPIGroupEntry($pi_group->gid); $this->assertEquals([], $entry->getAttribute("isDisabled")); try { @@ -162,7 +162,7 @@ public function testPIMgmtShowsBothGroupsWithDisabledAttributeSetFalseAndUnset() { global $USER, $LDAP; $this->switchUser("NormalPI"); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $entry = $LDAP->getPIGroupEntry($pi_group->gid); $this->assertEquals([], $entry->getAttribute("isDisabled")); $this->switchUser("Admin"); diff --git a/test/functional/PIMemberRequestTest.php b/test/functional/PIMemberRequestTest.php index 15b943e35..b8f8656da 100644 --- a/test/functional/PIMemberRequestTest.php +++ b/test/functional/PIMemberRequestTest.php @@ -32,7 +32,7 @@ private function cancelRequest(string $gid) private function approveUserByPI(string $uid, string $gid) { global $USER; - assert($USER->getPIGroup()->gid === $gid, "signed in user must be the group owner"); + assert($USER->getNamesakePIGroup()->gid === $gid, "signed in user must be the group owner"); $this->http_post(__DIR__ . "/../../webroot/panel/pi.php", [ "form_type" => "userReq", "action" => "Approve", @@ -67,7 +67,7 @@ private function denyRequestByPI(string $uid) private function denyRequestByAdmin(string $uid) { global $USER; - $gid = $USER->getPIGroup()->gid; + $gid = $USER->getNamesakePIGroup()->gid; $this->switchUser("Admin"); try { $this->http_post(__DIR__ . "/../../webroot/admin/pi-mgmt.php", [ @@ -85,7 +85,7 @@ public function testRequestMembershipAndCancel() { global $USER, $SQL; $this->switchUser("EmptyPIGroupOwner"); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $this->switchUser("Blank"); try { $this->requestMembership($pi_group->gid); @@ -103,7 +103,7 @@ public function testRequestMembershipBogus() { global $USER, $SQL; $this->switchUser("EmptyPIGroupOwner"); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $this->switchUser("Blank"); try { UnityHTTPD::clearMessages(); @@ -125,7 +125,7 @@ public function testRequestMembershipDuplicate() { global $USER, $SQL; $this->switchUser("EmptyPIGroupOwner"); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $this->switchUser("Blank"); $this->assertNumberRequests(0); try { @@ -180,7 +180,7 @@ public function testApproveNonexistentRequest($methodName) $this->switchUser("Blank"); $uid = $USER->uid; $this->switchUser("EmptyPIGroupOwner"); - $piGroup = $USER->getPIGroup(); + $piGroup = $USER->getNamesakePIGroup(); try { $this->expectException(Exception::class); // FIXME more specific exception type $this->$methodName($uid, $piGroup->gid); @@ -196,7 +196,7 @@ public function testApproveMember($methodName) global $USER, $SSO, $LDAP, $SQL, $MAILER; $this->switchUser("EmptyPIGroupOwner"); $pi_uid = $USER->uid; - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $gid = $pi_group->gid; $this->switchUser("Blank"); try { @@ -234,7 +234,7 @@ public function testDenyRequest(string $methodName) $requestedUser = $USER; $this->switchUser("EmptyPIGroupOwner"); $pi = $USER; - $piGroup = $USER->getPIGroup(); + $piGroup = $USER->getNamesakePIGroup(); $this->assertEmpty($piGroup->getRequests()); $this->assertEqualsCanonicalizing([$pi->uid], $piGroup->getMemberUIDs()); try { diff --git a/test/functional/PIRemoveUserTest.php b/test/functional/PIRemoveUserTest.php index 0b38766c3..d59ae2a64 100644 --- a/test/functional/PIRemoveUserTest.php +++ b/test/functional/PIRemoveUserTest.php @@ -11,7 +11,7 @@ class PIRemoveUserTest extends UnityWebPortalTestCase private function removeUserByPI(string $uid, string $gid) { global $USER; - assert($USER->getPIGroup()->gid === $gid, "signed in user must be the group owner"); + assert($USER->getNamesakePIGroup()->gid === $gid, "signed in user must be the group owner"); $this->http_post(__DIR__ . "/../../webroot/panel/pi.php", [ "form_type" => "remUser", "uid" => $uid, @@ -45,7 +45,7 @@ public function testRemoveUser($methodName) $this->switchUser("NormalPI"); $pi = $USER; $piUid = $USER->uid; - $piGroup = $USER->getPIGroup(); + $piGroup = $USER->getNamesakePIGroup(); $memberUIDs = $piGroup->getMemberUIDs(); // the ordering of the uids in getGroupMemberUIDs is different each time // use a linear search to find a user who is not the PI @@ -78,7 +78,7 @@ public function testRemovePIFromTheirOwnGroup($methodName) global $USER, $LDAP, $SQL, $MAILER; $this->switchUser("NormalPI"); $pi = $USER; - $piGroup = $USER->getPIGroup(); + $piGroup = $USER->getNamesakePIGroup(); $this->expectException(Exception::class); try { $this->$methodName($piGroup->getOwner()->uid, $piGroup->gid); @@ -93,9 +93,10 @@ public function testRemovePIFromTheirOwnGroup($methodName) public function testRemoveMemberAlsoRemovesManager() { - global $USER; + global $USER, $LDAP, $SQL, $MAILER; $this->switchUser("CourseGroupOwner"); - $group = $USER->getPIGroup(); + $gid = $LDAP->getPIGroupGIDsWithOwnerUID($USER->uid)[0]; + $group = new UnityGroup($gid, $LDAP, $SQL, $MAILER); $manager_uids = $group->getManagerUIDs(); $this->assertNotEmpty($manager_uids); $manager_uid = $manager_uids[0]; diff --git a/test/functional/PageLoadTest.php b/test/functional/PageLoadTest.php index e62993c55..fceef52ea 100644 --- a/test/functional/PageLoadTest.php +++ b/test/functional/PageLoadTest.php @@ -89,7 +89,7 @@ public function testLoadPIPageForAnotherGroupForbidden() { global $USER; $this->switchUser("EmptyPIGroupOwner"); - $gid = $USER->getPIGroup()->gid; + $gid = $USER->getNamesakePIGroup()->gid; $this->switchUser("Blank"); $output = $this->http_get( __DIR__ . "/../../webroot/panel/pi.php", diff --git a/test/functional/WorkerRemoveUsersFromGroupTest.php b/test/functional/WorkerRemoveUsersFromGroupTest.php index 665ae9b14..4f9ada862 100644 --- a/test/functional/WorkerRemoveUsersFromGroupTest.php +++ b/test/functional/WorkerRemoveUsersFromGroupTest.php @@ -10,7 +10,7 @@ public function testRemoveUsersFromGroup() global $USER, $LDAP, $SQL, $MAILER; $this->switchUser("EmptyPIGroupOwner"); $pi = $USER; - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $this->assertTrue($pi->isPI()); $this->assertEqualsCanonicalizing([$pi->uid], $pi_group->getMemberUIDs()); $this->assertEqualsCanonicalizing([$pi->uid], $pi_group->getMemberUIDs()); @@ -33,7 +33,7 @@ public function testRemoveUsersFromGroup() print implode("\n", $output); $this->switchUser("EmptyPIGroupOwner", validate: false); $pi = $USER; - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $this->assertEqualsCanonicalizing($expected_new_uids, $pi_group->getMemberUIDs()); $this->assertEqualsCanonicalizing($expected_new_uids, $pi_group->getMemberUIDs()); } finally { @@ -77,7 +77,7 @@ public function testRemoveNonexistentUID() { global $USER; $this->switchUser("EmptyPIGroupOwner"); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $members_before = $pi_group->getMemberUIDs(); $remove_uids_file = writeLinesToTmpFile(["foo", "bar"]); $remove_uids_file_path = getPathFromFileHandle($remove_uids_file); diff --git a/test/functional/WorkerUnityCourseTest.php b/test/functional/WorkerUnityCourseTest.php index 187c713e9..56c2339a9 100644 --- a/test/functional/WorkerUnityCourseTest.php +++ b/test/functional/WorkerUnityCourseTest.php @@ -2,29 +2,24 @@ class WorkerUnityCourseTest extends UnityWebPortalTestCase { - private static string $course_owner_uid = "cs124_org1_test"; + private static string $course_owner_uid = "user2_org1_test"; + private static string $course_manager_uid = "user3_org1_test"; private static string $course_gid = "pi_cs124_org1_test"; - private static array $course_owner_name = ["cs124", "Fall 2025"]; - private static string $manager_uid = "user2_org1_test"; - private static string $manager_mail = "user2@org1.test"; - private static string $courseOwnerMail = "user2+cs124@org1.test"; + private static array $course_info = ["cs124", "Fall 2025"]; public function testCreateCourse() { global $LDAP, $USER; $this->switchUser("Blank"); - $this->assertEquals(self::$manager_uid, $USER->uid); - $this->assertEquals(self::$manager_mail, $USER->getMail()); - $manager = $USER; + $this->assertEquals(self::$course_owner_uid, $USER->uid); $pi_group_entry = $LDAP->getPIGroupEntry(self::$course_gid); - $owner_user_entry = $LDAP->getUserEntry(self::$course_owner_uid); $this->assertFalse($pi_group_entry->exists()); - $this->assertFalse($owner_user_entry->exists()); $stdin_file = writeLinesToTmpFile([ - self::$course_owner_name[0], - self::$course_owner_name[1], + self::$course_info[0], + self::$course_info[1], + self::$course_gid, self::$course_owner_uid, - self::$manager_uid, + self::$course_manager_uid, ]); $stdin_file_path = getPathFromFileHandle($stdin_file); try { @@ -34,21 +29,25 @@ public function testCreateCourse() unset($GLOBALS["ldapconn"]); $this->switchUser("Admin"); $pi_group_entry = $LDAP->getPIGroupEntry(self::$course_gid); - $owner_user_entry = $LDAP->getUserEntry(self::$course_owner_uid); $this->assertTrue($pi_group_entry->exists()); - $this->assertTrue($owner_user_entry->exists()); - $this->assertEquals(self::$courseOwnerMail, $owner_user_entry->getAttribute("mail")[0]); $this->assertEqualsCanonicalizing( - [self::$course_owner_uid, $manager->uid], + [self::$course_owner_uid, self::$course_manager_uid], $pi_group_entry->getAttribute("memberuid"), ); $this->assertEqualsCanonicalizing( - [$manager->uid], + [self::$course_manager_uid], $pi_group_entry->getAttribute("manageruid"), ); + $this->assertEqualsCanonicalizing( + [self::$course_owner_uid], + $pi_group_entry->getAttribute("owneruid"), + ); + $this->assertEqualsCanonicalizing( + [self::$course_info[0] . " " . self::$course_info[1]], + $pi_group_entry->getAttribute("description"), + ); } finally { ensurePIGroupDoesNotExist(self::$course_gid); - ensureUserDoesNotExist(self::$course_owner_uid); unlink($stdin_file_path); } } diff --git a/test/functional/WorkerUpdateQualifiedUsersGroupTest.php b/test/functional/WorkerUpdateQualifiedUsersGroupTest.php index 62583f0c4..3f504d0d7 100644 --- a/test/functional/WorkerUpdateQualifiedUsersGroupTest.php +++ b/test/functional/WorkerUpdateQualifiedUsersGroupTest.php @@ -9,7 +9,7 @@ public function testQualifyUser() { global $USER, $LDAP, $SQL, $MAILER; $this->switchUser("EmptyPIGroupOwner"); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $this->switchUser("Blank"); $user = $USER; $expectedOutput = [ diff --git a/test/phpunit-bootstrap.php b/test/phpunit-bootstrap.php index c1986b35e..19d3bcf3f 100644 --- a/test/phpunit-bootstrap.php +++ b/test/phpunit-bootstrap.php @@ -202,6 +202,12 @@ function accessPrivateVariable($obj, string $name) return $property->getValue($obj); } +function accessPrivateConst($obj, string $name) +{ + $class = new \ReflectionClass($obj); + return $class->getConstant($name); +} + class UnityWebPortalTestCase extends TestCase { private ?string $last_user_nickname = null; @@ -238,8 +244,8 @@ class UnityWebPortalTestCase extends TestCase "Admin" => "user1_org1_test", "Blank" => "user2_org1_test", "EmptyPIGroupOwner" => "user5_org2_test", - "CourseGroupOwner" => "cs123_org1_test", - "CourseGroupManager" => "user1_org1_test", + "CourseGroupOwner" => "user1_org1_test", + "CourseGroupManager" => "user3_org1_test", "CustomMapped555" => "user2002_org998_test", "Disabled" => "user7_org1_test", "DisabledNotPI" => "user7_org1_test", @@ -282,8 +288,8 @@ public function validateUser(string $nickname) $this->assertTrue($LDAP->getOrgGroupEntry($USER->getOrg())->exists()); break; case "CourseGroupOwner": - $this->assertTrue($USER->getPIGroup()->exists()); - $this->assertNotEmpty($USER->getPIGroup()->getManagerUIDs()); + $this->assertTrue($USER->getNamesakePIGroup()->exists()); + $this->assertNotEmpty($LDAP->getPIGroupGIDsWithOwnerUID($USER->uid)); break; case "CourseGroupManager": $this->assertNotEmpty($LDAP->getPIGroupGIDsWithManagerUID($USER->uid)); @@ -295,7 +301,7 @@ public function validateUser(string $nickname) break; case "EmptyPIGroupOwner": $this->assertTrue($USER->isPI()); - $pi_group = $USER->getPIGroup(); + $pi_group = $USER->getNamesakePIGroup(); $this->assertEqualsCanonicalizing([$USER->uid], $pi_group->getMemberUIDs()); $this->assertEmpty($pi_group->getRequests()); break; @@ -304,12 +310,12 @@ public function validateUser(string $nickname) break; case "DisabledOwnerOfDisabledPIGroup": $this->assertTrue($USER->getFlag(UserFlag::DISABLED)); - $this->assertTrue($USER->getPIGroup()->exists()); - $this->assertTrue($USER->getPIGroup()->getIsDisabled()); + $this->assertTrue($USER->getNamesakePIGroup()->exists()); + $this->assertTrue($USER->getNamesakePIGroup()->getIsDisabled()); break; case "DisabledNotPI": $this->assertTrue($USER->getFlag(UserFlag::DISABLED)); - $this->assertFalse($USER->getPIGroup()->exists()); + $this->assertFalse($USER->getNamesakePIGroup()->exists()); break; case "DisabledPIGroup_user9_org3_test_Manager": $pi_group_entry = $LDAP->getPIGroupEntry("pi_user9_org3_test"); @@ -320,8 +326,8 @@ public function validateUser(string $nickname) $this->assertTrue($USER->exists()); $this->assertFalse($USER->getFlag(UserFlag::DISABLED)); $this->assertFalse($USER->isPI()); - $this->assertTrue($USER->getPIGroup()->exists()); - $this->assertTrue($USER->getPIGroup()->getIsDisabled()); + $this->assertTrue($USER->getNamesakePIGroup()->exists()); + $this->assertTrue($USER->getNamesakePIGroup()->getIsDisabled()); break; case "HasNoSshKeys": $this->assertEmpty($USER->getSSHKeys()); @@ -333,7 +339,7 @@ public function validateUser(string $nickname) break; case "ImmortalNotPI": $this->assertTrue($USER->getFlag(UserFlag::IMMORTAL)); - $this->assertFalse($USER->getPIGroup()->exists()); + $this->assertFalse($USER->getNamesakePIGroup()->exists()); break; case "Locked": $this->assertTrue($USER->getFlag(UserFlag::LOCKED)); @@ -358,7 +364,10 @@ public function validateUser(string $nickname) break; case "NormalPI": $this->assertTrue($USER->isPI()); - $this->assertGreaterThanOrEqual(2, count($USER->getPIGroup()->getMemberUIDs())); + $this->assertGreaterThanOrEqual( + 2, + count($USER->getNamesakePIGroup()->getMemberUIDs()), + ); break; case "HasOneSshKey": $this->assertEquals(1, count($USER->getSSHKeys())); @@ -429,22 +438,25 @@ public function assertRequestedMembership(bool $expected, string $gid) public function assertRequestedPIGroup(bool $expected) { global $USER, $SQL; + $gid = UnityGroup::ownerUID2NamesakeGID($USER->uid); + $request = "$USER->uid:$gid"; $this->assertEquals( $expected, - $SQL->requestExists($USER->uid, UnitySQL::REQUEST_BECOME_PI), + $SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP), ); } public function getNumberPiBecomeRequests() { global $USER, $SQL; - // FIXME table name, "admin" are public constants in UnitySQL - // FIXME "admin" should be something else + $gid = UnityGroup::ownerUID2NamesakeGID($USER->uid); + $request = "$USER->uid:$gid"; + $table = accessPrivateConst($SQL, "TABLE_REQS"); + $request_for = accessPrivateConst($SQL, "REQUEST_CREATE_PI_GROUP"); $stmt = $SQL ->getConn() - ->prepare("SELECT * FROM requests WHERE uid=:uid and request_for='admin'"); - $uid = $USER->uid; - $stmt->bindParam(":uid", $uid); + ->prepare("SELECT * FROM $table WHERE uid=:request and request_for='$request_for'"); + $stmt->bindParam(":request", $request); $stmt->execute(); return count($stmt->fetchAll()); } @@ -452,10 +464,12 @@ public function getNumberPiBecomeRequests() public function assertNumberPiBecomeRequests(int $x) { global $USER, $SQL; + $gid = UnityGroup::ownerUID2NamesakeGID($USER->uid); + $request = "$USER->uid:$gid"; if ($x == 0) { - $this->assertFalse($SQL->requestExists($USER->uid, UnitySQL::REQUEST_BECOME_PI)); + $this->assertFalse($SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP)); } elseif ($x > 0) { - $this->assertTrue($SQL->requestExists($USER->uid, UnitySQL::REQUEST_BECOME_PI)); + $this->assertTrue($SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP)); } else { throw new RuntimeException("x must not be negative"); } diff --git a/tools/docker-dev/identity/account-portal-schema.ldif b/tools/docker-dev/identity/account-portal-schema.ldif index 2603ce996..9f5a86e09 100644 --- a/tools/docker-dev/identity/account-portal-schema.ldif +++ b/tools/docker-dev/identity/account-portal-schema.ldif @@ -12,7 +12,17 @@ olcAttributeTypes: ( 1.1.3 NAME 'managerUid' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) +olcAttributeTypes: ( 1.1.4 NAME 'ownerUid' + DESC 'group owner' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 + SINGLE-VALUE + ) olcObjectClasses: ( 1.1.2 NAME 'piGroup' SUP top AUXILIARY - DESC 'PI Group' + DESC 'DEPRECATED, DO NOT USE' MAY ( isDisabled $ managerUid ) ) +olcObjectClasses: ( 1.1.5 NAME 'unityGroup' SUP top AUXILIARY + DESC 'general-purpose group in the Unity HPC Platform' + MAY ( isDisabled $ managerUid $ ownerUid ) + ) diff --git a/tools/docker-dev/identity/bootstrap.ldif b/tools/docker-dev/identity/bootstrap.ldif index da84e0043..c8671b510 100644 --- a/tools/docker-dev/identity/bootstrap.ldif +++ b/tools/docker-dev/identity/bootstrap.ldif @@ -1206,7 +1206,6 @@ memberuid: user1299_org1_test memberuid: user1300_org1_test memberuid: user1301_org1_test memberuid: user1304_org1_test -memberuid: cs123_org1_test dn: cn=user15_org3_test,ou=user_groups,dc=unityhpc,dc=test cn: user15_org3_test @@ -10429,15 +10428,17 @@ objectclass: top dn: cn=pi_user36_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user36_org2_test +owneruid: user36_org2_test gidnumber: 10206 memberuid: user36_org2_test memberuid: user912_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user42_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user42_org1_test +owneruid: user42_org1_test gidnumber: 10264 memberuid: user42_org1_test memberuid: user1052_org1_test @@ -10505,29 +10506,32 @@ memberuid: user1095_org1_test memberuid: user414_org1_test memberuid: user1020_org1_test memberuid: user1177_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user45_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user45_org1_test +owneruid: user45_org1_test gidnumber: 10243 memberuid: user45_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user51_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user51_org3_test +owneruid: user51_org3_test gidnumber: 10222 memberuid: user51_org3_test memberuid: user934_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user52_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user52_org1_test +owneruid: user52_org1_test gidnumber: 10151 memberuid: user52_org1_test memberuid: user1178_org1_test @@ -10541,29 +10545,32 @@ memberuid: user477_org1_test memberuid: user1265_org1_test memberuid: user1021_org1_test memberuid: user348_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user57_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user57_org2_test +owneruid: user57_org2_test gidnumber: 10132 memberuid: user57_org2_test memberuid: user67_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user66_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user66_org2_test +owneruid: user66_org2_test gidnumber: 10199 memberuid: user66_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user70_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user70_org1_test +owneruid: user70_org1_test gidnumber: 10082 memberuid: user70_org1_test memberuid: user1287_org1_test @@ -10573,38 +10580,42 @@ memberuid: user1073_org1_test memberuid: user1257_org1_test memberuid: user85_org1_test memberuid: user41_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user72_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user72_org3_test +owneruid: user72_org3_test gidnumber: 10223 memberuid: user72_org3_test memberuid: user1223_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user78_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user78_org1_test +owneruid: user78_org1_test gidnumber: 10157 memberuid: user78_org1_test memberuid: user526_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user93_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user93_org1_test +owneruid: user93_org1_test gidnumber: 10101 memberuid: user93_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user94_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user94_org1_test +owneruid: user94_org1_test gidnumber: 10088 memberuid: user94_org1_test memberuid: user836_org1_test @@ -10615,21 +10626,23 @@ memberuid: user747_org1_test memberuid: user516_org1_test memberuid: user821_org1_test memberuid: user1196_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user113_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user113_org1_test +owneruid: user113_org1_test gidnumber: 10099 memberuid: user113_org1_test memberuid: user272_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user126_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user126_org2_test +owneruid: user126_org2_test gidnumber: 10077 memberuid: user126_org2_test memberuid: user321_org2_test @@ -10637,12 +10650,13 @@ memberuid: user791_org2_test memberuid: user987_org2_test memberuid: user904_org2_test memberuid: user839_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user130_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user130_org1_test +owneruid: user130_org1_test gidnumber: 10008 memberuid: user130_org1_test memberuid: user427_org1_test @@ -10650,155 +10664,171 @@ memberuid: user60_org1_test memberuid: user29_org1_test memberuid: user46_org1_test memberuid: user734_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user135_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user135_org1_test +owneruid: user135_org1_test gidnumber: 10063 memberuid: user135_org1_test memberuid: user860_org1_test memberuid: user574_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user138_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user138_org3_test +owneruid: user138_org3_test gidnumber: 10116 memberuid: user138_org3_test memberuid: user512_org3_test memberuid: user406_org3_test memberuid: user1054_org3_test memberuid: user850_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user149_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user149_org1_test +owneruid: user149_org1_test gidnumber: 10071 memberuid: user149_org1_test memberuid: user263_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user150_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user150_org1_test +owneruid: user150_org1_test gidnumber: 10254 memberuid: user150_org1_test memberuid: user1250_org1_test memberuid: user208_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user162_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user162_org1_test +owneruid: user162_org1_test gidnumber: 10228 memberuid: user162_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user163_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user163_org1_test +owneruid: user163_org1_test gidnumber: 10179 memberuid: user163_org1_test memberuid: user300_org1_test memberuid: user749_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user166_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user166_org2_test +owneruid: user166_org2_test gidnumber: 10165 memberuid: user166_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user167_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user167_org1_test +owneruid: user167_org1_test gidnumber: 10009 memberuid: user167_org1_test memberuid: user1097_org1_test memberuid: user690_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user176_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user176_org2_test +owneruid: user176_org2_test gidnumber: 10216 memberuid: user176_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user181_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user181_org1_test +owneruid: user181_org1_test gidnumber: 10245 memberuid: user181_org1_test memberuid: user909_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user182_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user182_org1_test +owneruid: user182_org1_test gidnumber: 10150 memberuid: user182_org1_test memberuid: user752_org1_test memberuid: user529_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user187_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user187_org1_test +owneruid: user187_org1_test gidnumber: 10103 memberuid: user187_org1_test memberuid: user99_org1_test memberuid: user1141_org1_test memberuid: user236_org1_test memberuid: user757_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user188_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user188_org1_test +owneruid: user188_org1_test gidnumber: 10143 memberuid: user188_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user190_org000000007_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user190_org000000007_test +owneruid: user190_org000000007_test gidnumber: 10260 memberuid: user190_org000000007_test memberuid: user211_org000000007_test memberuid: user1164_org000000007_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user191_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user191_org2_test +owneruid: user191_org2_test gidnumber: 10181 memberuid: user191_org2_test memberuid: user1113_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user194_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user194_org1_test +owneruid: user194_org1_test gidnumber: 10079 memberuid: user194_org1_test memberuid: user360_org1_test @@ -10812,30 +10842,33 @@ memberuid: user1032_org13_test memberuid: user851_org1_test memberuid: user576_org1_test memberuid: user508_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user5_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user5_org2_test +owneruid: user5_org2_test gidnumber: 10135 memberuid: user5_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user197_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user197_org3_test +owneruid: user197_org3_test gidnumber: 10230 memberuid: user197_org3_test memberuid: user639_org3_test memberuid: user748_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user198_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user198_org1_test +owneruid: user198_org1_test gidnumber: 10154 memberuid: user198_org1_test memberuid: user1199_org1_test @@ -10843,37 +10876,41 @@ memberuid: user269_org1_test memberuid: user1007_org1_test memberuid: user1258_org1_test memberuid: user317_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user200_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user200_org2_test +owneruid: user200_org2_test gidnumber: 10275 memberuid: user200_org2_test memberuid: user662_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user201_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user201_org1_test +owneruid: user201_org1_test gidnumber: 10010 memberuid: user201_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user205_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user205_org1_test +owneruid: user205_org1_test gidnumber: 10274 memberuid: user205_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user206_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user206_org1_test +owneruid: user206_org1_test gidnumber: 10048 memberuid: user206_org1_test memberuid: user769_org1_test @@ -10881,20 +10918,22 @@ memberuid: user588_org1_test memberuid: user384_org1_test memberuid: user1081_org1_test memberuid: user772_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user207_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user207_org1_test +owneruid: user207_org1_test gidnumber: 10220 memberuid: user207_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user212_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user212_org1_test +owneruid: user212_org1_test gidnumber: 10074 memberuid: user212_org1_test memberuid: user793_org1_test @@ -10904,20 +10943,22 @@ memberuid: user566_org1_test memberuid: user511_org1_test memberuid: user950_org1_test memberuid: user894_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user214_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user214_org1_test +owneruid: user214_org1_test gidnumber: 10145 memberuid: user214_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user216_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user216_org1_test +owneruid: user216_org1_test gidnumber: 10005 memberuid: user216_org1_test memberuid: user340_org1_test @@ -10928,34 +10969,37 @@ memberuid: user1016_org1_test memberuid: user776_org1_test memberuid: user1285_org1_test memberuid: user472_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user219_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user219_org1_test +owneruid: user219_org1_test gidnumber: 10012 memberuid: user219_org1_test memberuid: user645_org1_test memberuid: user745_org1_test memberuid: user230_org1_test memberuid: user364_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user226_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user226_org3_test +owneruid: user226_org3_test gidnumber: 10164 memberuid: user226_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user9_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user9_org3_test +owneruid: user9_org3_test gidnumber: 10094 -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top isDisabled: TRUE @@ -10963,51 +11007,57 @@ manageruid: user12_org1_test dn: cn=pi_user10_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user10_org1_test +owneruid: user10_org1_test gidnumber: 2257 -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top isDisabled: TRUE dn: cn=pi_user242_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user242_org1_test +owneruid: user242_org1_test gidnumber: 10052 memberuid: user242_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user247_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user247_org1_test +owneruid: user247_org1_test gidnumber: 10126 memberuid: user247_org1_test memberuid: user178_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user252_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user252_org1_test +owneruid: user252_org1_test gidnumber: 10261 memberuid: user252_org1_test memberuid: user482_org1_test memberuid: user254_org1_test memberuid: user1239_org1_test memberuid: user918_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user253_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user253_org1_test +owneruid: user253_org1_test gidnumber: 10013 memberuid: user253_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user256_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user256_org1_test +owneruid: user256_org1_test gidnumber: 10006 memberuid: user256_org1_test memberuid: user1247_org1_test @@ -11027,197 +11077,218 @@ memberuid: user767_org1_test memberuid: user56_org1_test memberuid: user1200_org1_test memberuid: user280_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user264_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user264_org1_test +owneruid: user264_org1_test gidnumber: 10073 memberuid: user264_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user266_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user266_org1_test +owneruid: user266_org1_test gidnumber: 10162 memberuid: user266_org1_test memberuid: user111_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user268_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user268_org1_test +owneruid: user268_org1_test gidnumber: 10239 memberuid: user268_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user274_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user274_org2_test +owneruid: user274_org2_test gidnumber: 10283 memberuid: user274_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user277_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user277_org1_test +owneruid: user277_org1_test gidnumber: 10014 memberuid: user277_org1_test memberuid: user978_org1_test memberuid: user155_org1_test memberuid: user629_org1_test memberuid: user217_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user278_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user278_org3_test +owneruid: user278_org3_test gidnumber: 10180 memberuid: user278_org3_test memberuid: user20_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user288_org000000007_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user288_org000000007_test +owneruid: user288_org000000007_test gidnumber: 10234 memberuid: user288_org000000007_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user291_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user291_org1_test +owneruid: user291_org1_test gidnumber: 10201 memberuid: user291_org1_test memberuid: user473_org1_test memberuid: user110_org1_test memberuid: user441_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user292_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user292_org2_test +owneruid: user292_org2_test gidnumber: 10229 memberuid: user292_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user295_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user295_org3_test +owneruid: user295_org3_test gidnumber: 10277 memberuid: user295_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user303_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user303_org1_test +owneruid: user303_org1_test gidnumber: 10209 memberuid: user303_org1_test memberuid: user365_org1_test memberuid: user389_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user304_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user304_org1_test +owneruid: user304_org1_test gidnumber: 10248 memberuid: user304_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user309_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user309_org1_test +owneruid: user309_org1_test gidnumber: 10015 memberuid: user309_org1_test memberuid: user58_org1_test memberuid: user824_org1_test memberuid: user21_org1_test memberuid: user447_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user312_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user312_org1_test +owneruid: user312_org1_test gidnumber: 10155 memberuid: user312_org1_test memberuid: user794_org1_test memberuid: user1031_org1_test memberuid: user556_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user315_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user315_org2_test +owneruid: user315_org2_test gidnumber: 10112 memberuid: user315_org2_test memberuid: user392_org2_test memberuid: user866_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user326_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user326_org3_test +owneruid: user326_org3_test gidnumber: 10173 memberuid: user326_org3_test memberuid: user883_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user329_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user329_org1_test +owneruid: user329_org1_test gidnumber: 10136 memberuid: user329_org1_test memberuid: user46_org1_test memberuid: user148_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user331_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user331_org1_test +owneruid: user331_org1_test gidnumber: 10227 memberuid: user331_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user336_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user336_org1_test +owneruid: user336_org1_test gidnumber: 10137 memberuid: user336_org1_test memberuid: user478_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user338_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user338_org1_test +owneruid: user338_org1_test gidnumber: 10267 memberuid: user338_org1_test memberuid: user1149_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user342_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user342_org1_test +owneruid: user342_org1_test gidnumber: 10090 memberuid: user342_org1_test memberuid: user1188_org1_test @@ -11227,46 +11298,51 @@ memberuid: user570_org1_test memberuid: user888_org1_test memberuid: user343_org1_test memberuid: user535_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user345_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user345_org1_test +owneruid: user345_org1_test gidnumber: 10186 memberuid: user345_org1_test memberuid: user1084_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user346_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user346_org2_test +owneruid: user346_org2_test gidnumber: 10246 memberuid: user346_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user347_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user347_org2_test +owneruid: user347_org2_test gidnumber: 10081 memberuid: user347_org2_test memberuid: user24_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user354_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user354_org1_test +owneruid: user354_org1_test gidnumber: 10016 memberuid: user354_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user371_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user371_org1_test +owneruid: user371_org1_test gidnumber: 10066 memberuid: user371_org1_test memberuid: user332_org1_test @@ -11276,20 +11352,22 @@ memberuid: user908_org1_test memberuid: user434_org1_test memberuid: user1180_org1_test memberuid: user1024_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user372_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user372_org1_test +owneruid: user372_org1_test gidnumber: 10053 memberuid: user372_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user373_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user373_org1_test +owneruid: user373_org1_test gidnumber: 10065 memberuid: user373_org1_test memberuid: user128_org1_test @@ -11298,131 +11376,145 @@ memberuid: user301_org1_test memberuid: user401_org1_test memberuid: user306_org1_test memberuid: user1286_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user382_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user382_org1_test +owneruid: user382_org1_test gidnumber: 10219 memberuid: user382_org1_test memberuid: user590_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user386_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user386_org1_test +owneruid: user386_org1_test gidnumber: 10197 memberuid: user386_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user391_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user391_org1_test +owneruid: user391_org1_test gidnumber: 10098 memberuid: user391_org1_test memberuid: user63_org1_test memberuid: user874_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user393_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user393_org1_test +owneruid: user393_org1_test gidnumber: 10017 memberuid: user393_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user395_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user395_org1_test +owneruid: user395_org1_test gidnumber: 10122 memberuid: user395_org1_test memberuid: user993_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user398_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user398_org1_test +owneruid: user398_org1_test gidnumber: 10169 memberuid: user398_org1_test memberuid: user394_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user400_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user400_org1_test +owneruid: user400_org1_test gidnumber: 10170 memberuid: user400_org1_test memberuid: user712_org1_test memberuid: user91_org1_test memberuid: user653_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user404_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user404_org3_test +owneruid: user404_org3_test gidnumber: 10152 memberuid: user404_org3_test memberuid: user145_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user407_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user407_org1_test +owneruid: user407_org1_test gidnumber: 10238 memberuid: user407_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user415_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user415_org3_test +owneruid: user415_org3_test gidnumber: 10002 memberuid: user415_org3_test memberuid: user261_org3_test memberuid: user14_org3_test memberuid: user333_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user416_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user416_org1_test +owneruid: user416_org1_test gidnumber: 10279 memberuid: user416_org1_test memberuid: user952_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user420_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user420_org1_test +owneruid: user420_org1_test gidnumber: 10147 memberuid: user420_org1_test memberuid: user977_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user423_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user423_org1_test +owneruid: user423_org1_test gidnumber: 10252 memberuid: user423_org1_test memberuid: user1211_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user424_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user424_org2_test +owneruid: user424_org2_test gidnumber: 10040 memberuid: user424_org2_test memberuid: user1108_org2_test @@ -11433,49 +11525,54 @@ memberuid: user972_org10_test memberuid: user251_org2_test memberuid: user170_org2_test memberuid: user1002_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user426_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user426_org3_test +owneruid: user426_org3_test gidnumber: 10177 memberuid: user426_org3_test memberuid: user112_org3_test memberuid: user944_org3_test memberuid: user202_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user432_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user432_org2_test +owneruid: user432_org2_test gidnumber: 10212 memberuid: user432_org2_test memberuid: user595_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user433_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user433_org1_test +owneruid: user433_org1_test gidnumber: 10156 memberuid: user433_org1_test memberuid: user209_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user436_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user436_org2_test +owneruid: user436_org2_test gidnumber: 10236 memberuid: user436_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user438_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user438_org1_test +owneruid: user438_org1_test gidnumber: 10001 memberuid: user341_org1_test memberuid: user438_org1_test @@ -11486,44 +11583,48 @@ memberuid: user422_org1_test memberuid: user168_org1_test memberuid: user759_org1_test memberuid: user661_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user439_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user439_org2_test +owneruid: user439_org2_test gidnumber: 10205 memberuid: user439_org2_test memberuid: user412_org2_test memberuid: user780_org2_test memberuid: user1133_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user440_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user440_org1_test +owneruid: user440_org1_test gidnumber: 10060 memberuid: user440_org1_test memberuid: user89_org1_test memberuid: user1080_org1_test memberuid: user146_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user442_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user442_org1_test +owneruid: user442_org1_test gidnumber: 10263 memberuid: user442_org1_test memberuid: user700_org1_test memberuid: user1053_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user446_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user446_org1_test +owneruid: user446_org1_test gidnumber: 10047 memberuid: user446_org1_test memberuid: user1079_org1_test @@ -11540,32 +11641,35 @@ memberuid: user1155_org1_test memberuid: user1008_org1_test memberuid: user468_org1_test memberuid: user240_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user452_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user452_org1_test +owneruid: user452_org1_test gidnumber: 10003 memberuid: user452_org1_test memberuid: user316_org1_test memberuid: user746_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user453_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user453_org1_test +owneruid: user453_org1_test gidnumber: 10118 memberuid: user453_org1_test memberuid: user1210_org1_test memberuid: user555_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user458_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user458_org1_test +owneruid: user458_org1_test gidnumber: 10089 memberuid: user458_org1_test memberuid: user310_org1_test @@ -11576,48 +11680,53 @@ memberuid: user874_org1_test memberuid: user963_org1_test memberuid: user397_org1_test memberuid: user910_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user460_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user460_org1_test +owneruid: user460_org1_test gidnumber: 10172 memberuid: user460_org1_test memberuid: user172_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user466_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user466_org2_test +owneruid: user466_org2_test gidnumber: 10166 memberuid: user466_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user467_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user467_org2_test +owneruid: user467_org2_test gidnumber: 10129 memberuid: user467_org2_test memberuid: user723_org2_test memberuid: user259_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user480_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user480_org1_test +owneruid: user480_org1_test gidnumber: 10168 memberuid: user480_org1_test memberuid: user900_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user483_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user483_org1_test +owneruid: user483_org1_test gidnumber: 10141 memberuid: user483_org1_test memberuid: user762_org1_test @@ -11651,12 +11760,13 @@ memberuid: user899_org1_test memberuid: user924_org1_test memberuid: user1295_org1_test memberuid: user1061_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user487_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user487_org2_test +owneruid: user487_org2_test gidnumber: 10194 memberuid: user487_org2_test memberuid: user479_org2_test @@ -11668,12 +11778,13 @@ memberuid: user553_org2_test memberuid: user129_org2_test memberuid: user669_org2_test memberuid: user648_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user496_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user496_org1_test +owneruid: user496_org1_test gidnumber: 10087 memberuid: user496_org1_test memberuid: user682_org1_test @@ -11700,12 +11811,13 @@ memberuid: user982_org1_test memberuid: user75_org1_test memberuid: user151_org1_test memberuid: user557_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user500_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user500_org1_test +owneruid: user500_org1_test gidnumber: 10093 memberuid: user500_org1_test memberuid: user563_org1_test @@ -11724,23 +11836,25 @@ memberuid: user895_org1_test memberuid: user623_org1_test memberuid: user97_org1_test memberuid: user953_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user502_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user502_org1_test +owneruid: user502_org1_test gidnumber: 10203 memberuid: user502_org1_test memberuid: user1072_org1_test memberuid: user1194_org1_test memberuid: user82_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user507_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user507_org2_test +owneruid: user507_org2_test gidnumber: 10110 memberuid: user507_org2_test memberuid: user104_org2_test @@ -11749,67 +11863,74 @@ memberuid: user716_org2_test memberuid: user584_org2_test memberuid: user788_org2_test memberuid: user170_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user513_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user513_org1_test +owneruid: user513_org1_test gidnumber: 10108 memberuid: user513_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user517_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user517_org1_test +owneruid: user517_org1_test gidnumber: 10251 memberuid: user517_org1_test memberuid: user1253_org1_test memberuid: user616_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user519_org000000007_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user519_org000000007_test +owneruid: user519_org000000007_test gidnumber: 10259 memberuid: user519_org000000007_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user528_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user528_org1_test +owneruid: user528_org1_test gidnumber: 10104 memberuid: user528_org1_test memberuid: user799_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user530_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user530_org1_test +owneruid: user530_org1_test gidnumber: 10095 memberuid: user530_org1_test memberuid: user1222_org1_test memberuid: user16_org1_test memberuid: user1131_org1_test memberuid: user402_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user532_org000000007_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user532_org000000007_test +owneruid: user532_org000000007_test gidnumber: 10174 memberuid: user532_org000000007_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user534_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user534_org1_test +owneruid: user534_org1_test gidnumber: 10085 memberuid: user534_org1_test memberuid: user619_org1_test @@ -11817,12 +11938,13 @@ memberuid: user353_org1_test memberuid: user869_org1_test memberuid: user1116_org1_test memberuid: user896_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user543_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user543_org1_test +owneruid: user543_org1_test gidnumber: 10111 memberuid: user543_org1_test memberuid: user621_org1_test @@ -11879,12 +12001,13 @@ memberuid: user1218_org1_test memberuid: user1202_org1_test memberuid: user1217_org1_test memberuid: user960_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1_org1_test +owneruid: user1_org1_test gidnumber: 10000 memberuid: user4_org1_test memberuid: user1_org1_test @@ -11899,30 +12022,33 @@ memberuid: user491_org4_test memberuid: user689_org1_test memberuid: user12_org1_test memberuid: user697_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user546_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user546_org1_test +owneruid: user546_org1_test gidnumber: 10193 memberuid: user546_org1_test memberuid: user103_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user550_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user550_org1_test +owneruid: user550_org1_test gidnumber: 10187 memberuid: user550_org1_test memberuid: user1107_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user551_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user551_org1_test +owneruid: user551_org1_test gidnumber: 10019 memberuid: user551_org1_test memberuid: user1267_org1_test @@ -11931,57 +12057,63 @@ memberuid: user385_org1_test memberuid: user1219_org1_test memberuid: user992_org1_test memberuid: user1023_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user554_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user554_org2_test +owneruid: user554_org2_test gidnumber: 10241 memberuid: user554_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user559_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user559_org1_test +owneruid: user559_org1_test gidnumber: 10004 memberuid: user559_org1_test memberuid: user509_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user560_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user560_org1_test +owneruid: user560_org1_test gidnumber: 10057 memberuid: user560_org1_test memberuid: user875_org1_test memberuid: user589_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user561_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user561_org1_test +owneruid: user561_org1_test gidnumber: 10054 memberuid: user561_org1_test memberuid: user932_org1_test memberuid: user25_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user564_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user564_org1_test +owneruid: user564_org1_test gidnumber: 10123 memberuid: user564_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user565_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user565_org1_test +owneruid: user565_org1_test gidnumber: 10018 memberuid: user565_org1_test memberuid: user215_org1_test @@ -12010,12 +12142,13 @@ memberuid: user544_org1_test memberuid: user61_org1_test memberuid: user846_org1_test memberuid: user1167_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user569_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user569_org1_test +owneruid: user569_org1_test gidnumber: 10106 memberuid: user569_org1_test memberuid: user875_org1_test @@ -12027,66 +12160,73 @@ memberuid: user611_org1_test memberuid: user1132_org1_test memberuid: user378_org1_test memberuid: user143_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user575_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user575_org1_test +owneruid: user575_org1_test gidnumber: 10092 memberuid: user575_org1_test memberuid: user863_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user580_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user580_org1_test +owneruid: user580_org1_test gidnumber: 10119 memberuid: user580_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user582_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user582_org1_test +owneruid: user582_org1_test gidnumber: 10051 memberuid: user582_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user586_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user586_org1_test +owneruid: user586_org1_test gidnumber: 10020 memberuid: user586_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user591_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user591_org1_test +owneruid: user591_org1_test gidnumber: 10139 memberuid: user591_org1_test memberuid: user1104_org1_test memberuid: user357_org1_test memberuid: user39_org1_test memberuid: user281_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user592_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user592_org2_test +owneruid: user592_org2_test gidnumber: 10235 memberuid: user592_org2_test memberuid: user410_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user601_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user601_org1_test +owneruid: user601_org1_test gidnumber: 10080 memberuid: user601_org1_test memberuid: user86_org1_test @@ -12104,20 +12244,22 @@ memberuid: user234_org9_test memberuid: user258_org1_test memberuid: user728_org9_test memberuid: user1147_org9_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user608_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user608_org1_test +owneruid: user608_org1_test gidnumber: 10070 memberuid: user608_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user615_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user615_org1_test +owneruid: user615_org1_test gidnumber: 10021 memberuid: user615_org1_test memberuid: user660_org1_test @@ -12125,114 +12267,126 @@ memberuid: user37_org1_test memberuid: user1216_org1_test memberuid: user583_org1_test memberuid: user838_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user626_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user626_org1_test +owneruid: user626_org1_test gidnumber: 10107 memberuid: user626_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user635_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user635_org1_test +owneruid: user635_org1_test gidnumber: 10175 memberuid: user635_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user636_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user636_org2_test +owneruid: user636_org2_test gidnumber: 10195 memberuid: user636_org2_test memberuid: user694_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user641_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user641_org1_test +owneruid: user641_org1_test gidnumber: 10084 memberuid: user641_org1_test memberuid: user239_org1_test memberuid: user1017_org1_test memberuid: user409_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user647_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user647_org1_test +owneruid: user647_org1_test gidnumber: 10115 memberuid: user647_org1_test memberuid: user739_org1_test memberuid: user800_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user656_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user656_org1_test +owneruid: user656_org1_test gidnumber: 10064 memberuid: user656_org1_test memberuid: user80_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user659_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user659_org1_test +owneruid: user659_org1_test gidnumber: 10144 memberuid: user659_org1_test memberuid: user265_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user663_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user663_org2_test +owneruid: user663_org2_test gidnumber: 10202 memberuid: user663_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user666_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user666_org1_test +owneruid: user666_org1_test gidnumber: 10125 memberuid: user666_org1_test memberuid: user495_org1_test memberuid: user319_org1_test memberuid: user678_org1_test memberuid: user379_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user670_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user670_org1_test +owneruid: user670_org1_test gidnumber: 10062 memberuid: user670_org1_test memberuid: user195_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user674_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user674_org1_test +owneruid: user674_org1_test gidnumber: 10217 memberuid: user674_org1_test memberuid: user680_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user676_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user676_org1_test +owneruid: user676_org1_test gidnumber: 10058 memberuid: user676_org1_test memberuid: user137_org1_test @@ -12240,23 +12394,25 @@ memberuid: user62_org1_test memberuid: user649_org1_test memberuid: user381_org1_test memberuid: user1085_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user677_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user677_org1_test +owneruid: user677_org1_test gidnumber: 10127 memberuid: user677_org1_test memberuid: user1294_org1_test memberuid: user1161_org1_test memberuid: user484_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user681_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user681_org1_test +owneruid: user681_org1_test gidnumber: 10042 memberuid: user681_org1_test memberuid: user1066_org1_test @@ -12277,12 +12433,13 @@ memberuid: user533_org1_test memberuid: user524_org1_test memberuid: user596_org1_test memberuid: user267_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user688_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user688_org1_test +owneruid: user688_org1_test gidnumber: 10113 memberuid: user688_org1_test memberuid: user374_org1_test @@ -12293,109 +12450,120 @@ memberuid: user352_org1_test memberuid: user825_org1_test memberuid: user598_org1_test memberuid: user618_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user695_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user695_org2_test +owneruid: user695_org2_test gidnumber: 10211 memberuid: user695_org2_test memberuid: user705_org2_test memberuid: user541_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user699_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user699_org1_test +owneruid: user699_org1_test gidnumber: 10075 memberuid: user699_org1_test memberuid: user665_org1_test memberuid: user44_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user703_org11_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user703_org11_test +owneruid: user703_org11_test gidnumber: 10207 memberuid: user703_org11_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user714_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user714_org2_test +owneruid: user714_org2_test gidnumber: 10044 memberuid: user714_org2_test memberuid: user760_org2_test memberuid: user538_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user717_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user717_org2_test +owneruid: user717_org2_test gidnumber: 10200 memberuid: user717_org2_test memberuid: user189_org2_test memberuid: user929_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user720_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user720_org1_test +owneruid: user720_org1_test gidnumber: 10161 memberuid: user720_org1_test memberuid: user171_org1_test memberuid: user470_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user722_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user722_org1_test +owneruid: user722_org1_test gidnumber: 10091 memberuid: user722_org1_test memberuid: user276_org1_test memberuid: user497_org1_test memberuid: user811_org1_test memberuid: user88_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user724_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user724_org1_test +owneruid: user724_org1_test gidnumber: 10045 memberuid: user724_org1_test memberuid: user864_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user725_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user725_org2_test +owneruid: user725_org2_test gidnumber: 10198 memberuid: user725_org2_test memberuid: user876_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user727_org000000007_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user727_org000000007_test +owneruid: user727_org000000007_test gidnumber: 10266 memberuid: user727_org000000007_test memberuid: user1192_org000000007_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user730_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user730_org1_test +owneruid: user730_org1_test gidnumber: 10072 memberuid: user730_org1_test memberuid: user1120_org1_test @@ -12404,24 +12572,26 @@ memberuid: user38_org1_test memberuid: user377_org1_test memberuid: user224_org1_test memberuid: user451_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user733_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user733_org1_test +owneruid: user733_org1_test gidnumber: 10036 memberuid: user733_org1_test memberuid: user852_org1_test memberuid: user971_org1_test memberuid: user1139_org1_test memberuid: user951_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user736_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user736_org1_test +owneruid: user736_org1_test gidnumber: 10083 memberuid: user736_org1_test memberuid: user116_org1_test @@ -12470,40 +12640,44 @@ memberuid: user597_org1_test memberuid: user139_org1_test memberuid: user1026_org1_test memberuid: user109_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user737_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user737_org1_test +owneruid: user737_org1_test gidnumber: 10039 memberuid: user737_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user743_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user743_org1_test +owneruid: user743_org1_test gidnumber: 10069 memberuid: user743_org1_test memberuid: user1263_org1_test memberuid: user1098_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user744_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user744_org1_test +owneruid: user744_org1_test gidnumber: 10022 memberuid: user744_org1_test memberuid: user704_org1_test memberuid: user787_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user751_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user751_org1_test +owneruid: user751_org1_test gidnumber: 10130 memberuid: user751_org1_test memberuid: user1093_org1_test @@ -12517,28 +12691,31 @@ memberuid: user627_org1_test memberuid: user552_org1_test memberuid: user891_org1_test memberuid: user1034_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user758_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user758_org1_test +owneruid: user758_org1_test gidnumber: 10278 memberuid: user758_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user764_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user764_org1_test +owneruid: user764_org1_test gidnumber: 10237 memberuid: user764_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user765_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user765_org1_test +owneruid: user765_org1_test gidnumber: 10067 memberuid: user765_org1_test memberuid: user42_org1_test @@ -12555,12 +12732,13 @@ memberuid: user1248_org1_test memberuid: user854_org1_test memberuid: user984_org1_test memberuid: user1157_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user777_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user777_org3_test +owneruid: user777_org3_test gidnumber: 10102 memberuid: user777_org3_test memberuid: user204_org3_test @@ -12568,40 +12746,44 @@ memberuid: user729_org3_test memberuid: user15_org3_test memberuid: user417_org3_test memberuid: user766_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user782_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user782_org1_test +owneruid: user782_org1_test gidnumber: 10059 memberuid: user782_org1_test memberuid: user1162_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user783_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user783_org1_test +owneruid: user783_org1_test gidnumber: 10167 memberuid: user783_org1_test memberuid: user1057_org1_test memberuid: user991_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user784_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user784_org1_test +owneruid: user784_org1_test gidnumber: 10281 memberuid: user784_org1_test memberuid: user228_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user785_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user785_org1_test +owneruid: user785_org1_test gidnumber: 10023 memberuid: user785_org1_test memberuid: user244_org1_test @@ -12609,31 +12791,34 @@ memberuid: user1160_org1_test memberuid: user650_org1_test memberuid: user492_org1_test memberuid: user1256_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user786_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user786_org1_test +owneruid: user786_org1_test gidnumber: 10024 memberuid: user786_org1_test memberuid: user1146_org1_test memberuid: user301_org1_test memberuid: user942_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user788_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user788_org2_test +owneruid: user788_org2_test gidnumber: 10191 memberuid: user788_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user789_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user789_org3_test +owneruid: user789_org3_test gidnumber: 10000007 memberuid: user789_org3_test memberuid: user105_org3_test @@ -12642,74 +12827,82 @@ memberuid: user74_org3_test memberuid: user644_org3_test memberuid: user231_org3_test memberuid: user630_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user795_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user795_org1_test +owneruid: user795_org1_test gidnumber: 10178 memberuid: user795_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user796_org11_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user796_org11_test +owneruid: user796_org11_test gidnumber: 10133 memberuid: user796_org11_test memberuid: user710_org11_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user798_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user798_org1_test +owneruid: user798_org1_test gidnumber: 10035 memberuid: user798_org1_test memberuid: user756_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user801_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user801_org1_test +owneruid: user801_org1_test gidnumber: 10271 memberuid: user801_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user803_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user803_org1_test +owneruid: user803_org1_test gidnumber: 10025 memberuid: user803_org1_test memberuid: user1058_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user805_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user805_org3_test +owneruid: user805_org3_test gidnumber: 10242 memberuid: user805_org3_test memberuid: user154_org3_test memberuid: user672_org3_test memberuid: user673_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user809_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user809_org2_test +owneruid: user809_org2_test gidnumber: 10190 memberuid: user809_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user817_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user817_org1_test +owneruid: user817_org1_test gidnumber: 10026 memberuid: user817_org1_test memberuid: user1146_org1_test @@ -12717,132 +12910,147 @@ memberuid: user998_org1_test memberuid: user581_org1_test memberuid: user1142_org1_test memberuid: user504_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user830_org11_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user830_org11_test +owneruid: user830_org11_test gidnumber: 10100 memberuid: user830_org11_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user832_org14_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user832_org14_test +owneruid: user832_org14_test gidnumber: 10268 memberuid: user832_org14_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user833_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user833_org1_test +owneruid: user833_org1_test gidnumber: 10218 memberuid: user833_org1_test memberuid: user379_org1_test memberuid: user335_org1_test memberuid: user701_org1_test memberuid: user763_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user834_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user834_org2_test +owneruid: user834_org2_test gidnumber: 10224 memberuid: user834_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user848_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user848_org1_test +owneruid: user848_org1_test gidnumber: 10225 memberuid: user848_org1_test memberuid: user284_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user849_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user849_org1_test +owneruid: user849_org1_test gidnumber: 10160 memberuid: user849_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user857_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user857_org1_test +owneruid: user857_org1_test gidnumber: 10027 memberuid: user857_org1_test memberuid: user1036_org1_test memberuid: user708_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user859_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user859_org1_test +owneruid: user859_org1_test gidnumber: 10158 memberuid: user859_org1_test memberuid: user96_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user865_org000000007_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user865_org000000007_test +owneruid: user865_org000000007_test gidnumber: 10221 memberuid: user865_org000000007_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user868_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user868_org1_test +owneruid: user868_org1_test gidnumber: 10076 memberuid: user868_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user870_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user870_org3_test +owneruid: user870_org3_test gidnumber: 10233 memberuid: user870_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user872_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user872_org1_test +owneruid: user872_org1_test gidnumber: 10038 memberuid: user872_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user873_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user873_org2_test +owneruid: user873_org2_test gidnumber: 10142 memberuid: user873_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user875_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user875_org1_test +owneruid: user875_org1_test gidnumber: 10185 memberuid: user875_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user877_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user877_org1_test +owneruid: user877_org1_test gidnumber: 10028 memberuid: user877_org1_test memberuid: user147_org1_test @@ -12858,229 +13066,253 @@ memberuid: user457_org1_test memberuid: user286_org1_test memberuid: user884_org1_test memberuid: user562_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user878_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user878_org2_test +owneruid: user878_org2_test gidnumber: 10214 memberuid: user878_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user879_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user879_org1_test +owneruid: user879_org1_test gidnumber: 10037 memberuid: user879_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user881_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user881_org1_test +owneruid: user881_org1_test gidnumber: 10086 memberuid: user881_org1_test memberuid: user1203_org1_test memberuid: user220_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user882_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user882_org1_test +owneruid: user882_org1_test gidnumber: 10215 memberuid: user882_org1_test memberuid: user941_org1_test memberuid: user238_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user885_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user885_org1_test +owneruid: user885_org1_test gidnumber: 10029 memberuid: user885_org1_test memberuid: user742_org1_test memberuid: user490_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user886_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user886_org1_test +owneruid: user886_org1_test gidnumber: 10121 memberuid: user886_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user890_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user890_org3_test +owneruid: user890_org3_test gidnumber: 10182 memberuid: user890_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user905_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user905_org1_test +owneruid: user905_org1_test gidnumber: 10272 memberuid: user905_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user915_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user915_org1_test +owneruid: user915_org1_test gidnumber: 10184 memberuid: user915_org1_test memberuid: user431_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user917_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user917_org1_test +owneruid: user917_org1_test gidnumber: 10280 memberuid: user917_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user928_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user928_org1_test +owneruid: user928_org1_test gidnumber: 10050 memberuid: user928_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user931_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user931_org1_test +owneruid: user931_org1_test gidnumber: 10253 memberuid: user931_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user933_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user933_org2_test +owneruid: user933_org2_test gidnumber: 10153 memberuid: user933_org2_test memberuid: user122_org2_test memberuid: user617_org2_test memberuid: user1050_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user935_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user935_org1_test +owneruid: user935_org1_test gidnumber: 10114 memberuid: user935_org1_test memberuid: user106_org1_test memberuid: user115_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user936_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user936_org1_test +owneruid: user936_org1_test gidnumber: 10061 memberuid: user936_org1_test memberuid: user831_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user937_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user937_org1_test +owneruid: user937_org1_test gidnumber: 10171 memberuid: user937_org1_test memberuid: user1195_org1_test memberuid: user356_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user938_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user938_org1_test +owneruid: user938_org1_test gidnumber: 10068 memberuid: user938_org1_test memberuid: user907_org1_test memberuid: user1153_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user940_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user940_org3_test +owneruid: user940_org3_test gidnumber: 10183 memberuid: user940_org3_test memberuid: user299_org3_test memberuid: user945_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user955_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user955_org2_test +owneruid: user955_org2_test gidnumber: 10105 memberuid: user955_org2_test memberuid: user802_org2_test memberuid: user726_org2_test memberuid: user140_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user957_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user957_org1_test +owneruid: user957_org1_test gidnumber: 10247 memberuid: user957_org1_test memberuid: user31_org1_test memberuid: user454_org1_test memberuid: user390_org1_test memberuid: user1174_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user962_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user962_org1_test +owneruid: user962_org1_test gidnumber: 10204 memberuid: user962_org1_test memberuid: user696_org1_test memberuid: user350_org1_test memberuid: user624_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user967_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user967_org1_test +owneruid: user967_org1_test gidnumber: 10096 memberuid: user967_org1_test memberuid: user683_org1_test memberuid: user118_org1_test memberuid: user981_org1_test memberuid: user1159_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user968_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user968_org2_test +owneruid: user968_org2_test gidnumber: 10120 memberuid: user968_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user975_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user975_org1_test +owneruid: user975_org1_test gidnumber: 10176 memberuid: user975_org1_test memberuid: user65_org1_test @@ -13088,12 +13320,13 @@ memberuid: user567_org1_test memberuid: user455_org1_test memberuid: user399_org1_test memberuid: user218_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user979_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user979_org2_test +owneruid: user979_org2_test gidnumber: 10232 memberuid: user979_org2_test memberuid: user170_org2_test @@ -13101,125 +13334,138 @@ memberuid: user408_org2_test memberuid: user322_org2_test memberuid: user375_org2_test memberuid: user985_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1005_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1005_org3_test +owneruid: user1005_org3_test gidnumber: 10262 memberuid: user1005_org3_test memberuid: user203_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1009_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1009_org1_test +owneruid: user1009_org1_test gidnumber: 10034 memberuid: user1009_org1_test memberuid: user474_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1018_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1018_org2_test +owneruid: user1018_org2_test gidnumber: 10255 memberuid: user1018_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1019_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1019_org3_test +owneruid: user1019_org3_test gidnumber: 10149 memberuid: user1019_org3_test memberuid: user1138_org3_test memberuid: user812_org3_test memberuid: user646_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1022_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1022_org3_test +owneruid: user1022_org3_test gidnumber: 10163 memberuid: user1022_org3_test memberuid: user159_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1028_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1028_org1_test +owneruid: user1028_org1_test gidnumber: 10134 memberuid: user1028_org1_test memberuid: user21_org1_test memberuid: user161_org1_test memberuid: user824_org1_test memberuid: user447_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1029_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1029_org1_test +owneruid: user1029_org1_test gidnumber: 10148 memberuid: user1029_org1_test memberuid: user903_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1033_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1033_org1_test +owneruid: user1033_org1_test gidnumber: 10196 memberuid: user1033_org1_test memberuid: user1061_org1_test memberuid: user26_org1_test memberuid: user1069_org1_test memberuid: user79_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1039_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1039_org1_test +owneruid: user1039_org1_test gidnumber: 10256 memberuid: user1039_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1045_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1045_org1_test +owneruid: user1045_org1_test gidnumber: 10030 memberuid: user1045_org1_test memberuid: user740_org1_test memberuid: user1154_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1053_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1053_org1_test +owneruid: user1053_org1_test gidnumber: 10258 memberuid: user1053_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1056_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1056_org2_test +owneruid: user1056_org2_test gidnumber: 10270 memberuid: user1056_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1062_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1062_org1_test +owneruid: user1062_org1_test gidnumber: 10097 memberuid: user1062_org1_test memberuid: user435_org1_test @@ -13230,85 +13476,94 @@ memberuid: user939_org1_test memberuid: user19_org1_test memberuid: user573_org1_test memberuid: user1090_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1076_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1076_org1_test +owneruid: user1076_org1_test gidnumber: 10276 memberuid: user1076_org1_test memberuid: user227_org8_test memberuid: user1237_org1_test memberuid: user494_org8_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1077_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1077_org2_test +owneruid: user1077_org2_test gidnumber: 10131 memberuid: user1077_org2_test memberuid: user709_org2_test memberuid: user593_org2_test memberuid: user610_org2_test memberuid: user525_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1079_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1079_org1_test +owneruid: user1079_org1_test gidnumber: 10159 memberuid: user1079_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1082_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1082_org1_test +owneruid: user1082_org1_test gidnumber: 10056 memberuid: user1082_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1101_org14_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1101_org14_test +owneruid: user1101_org14_test gidnumber: 10269 memberuid: user1101_org14_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1103_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1103_org2_test +owneruid: user1103_org2_test gidnumber: 10240 memberuid: user1103_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1109_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1109_org2_test +owneruid: user1109_org2_test gidnumber: 10192 memberuid: user1109_org2_test memberuid: user520_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1110_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1110_org2_test +owneruid: user1110_org2_test gidnumber: 10257 memberuid: user1110_org2_test memberuid: user183_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1111_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1111_org1_test +owneruid: user1111_org1_test gidnumber: 10138 memberuid: user1111_org1_test memberuid: user184_org1_test @@ -13316,20 +13571,22 @@ memberuid: user605_org1_test memberuid: user1268_org1_test memberuid: user506_org1_test memberuid: user671_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1118_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1118_org1_test +owneruid: user1118_org1_test gidnumber: 10033 memberuid: user1118_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1123_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1123_org1_test +owneruid: user1123_org1_test gidnumber: 10140 memberuid: user1123_org1_test memberuid: user169_org1_test @@ -13339,12 +13596,13 @@ memberuid: user131_org1_test memberuid: user1290_org1_test memberuid: user1197_org1_test memberuid: user806_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user11_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user11_org1_test +owneruid: user11_org1_test gidnumber: 10031 memberuid: user11_org1_test memberuid: user156_org6_test @@ -13353,167 +13611,185 @@ memberuid: user1126_org12_test memberuid: user1068_org12_test memberuid: user686_org12_test memberuid: user804_org12_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1128_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1128_org1_test +owneruid: user1128_org1_test gidnumber: 10284 memberuid: user1128_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1129_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1129_org1_test +owneruid: user1129_org1_test gidnumber: 10189 memberuid: user1129_org1_test memberuid: user861_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1130_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1130_org1_test +owneruid: user1130_org1_test gidnumber: 10117 memberuid: user1130_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1140_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1140_org1_test +owneruid: user1140_org1_test gidnumber: 10078 memberuid: user1140_org1_test memberuid: user1193_org5_test memberuid: user1121_org5_test memberuid: user855_org5_test memberuid: user76_org5_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1165_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1165_org1_test +owneruid: user1165_org1_test gidnumber: 10055 memberuid: user1165_org1_test memberuid: user1074_org1_test memberuid: user1299_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1171_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1171_org1_test +owneruid: user1171_org1_test gidnumber: 10250 memberuid: user1171_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1175_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1175_org1_test +owneruid: user1175_org1_test gidnumber: 10046 memberuid: user1175_org1_test memberuid: user127_org1_test memberuid: user1289_org1_test memberuid: user1163_org1_test memberuid: user956_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1176_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1176_org1_test +owneruid: user1176_org1_test gidnumber: 10188 memberuid: user1176_org1_test memberuid: user845_org1_test memberuid: user314_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1182_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1182_org2_test +owneruid: user1182_org2_test gidnumber: 10128 memberuid: user1182_org2_test memberuid: user1189_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1185_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1185_org1_test +owneruid: user1185_org1_test gidnumber: 10213 memberuid: user1185_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1187_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1187_org1_test +owneruid: user1187_org1_test gidnumber: 10208 memberuid: user1187_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1191_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1191_org2_test +owneruid: user1191_org2_test gidnumber: 10231 memberuid: user1191_org2_test memberuid: user594_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1201_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1201_org1_test +owneruid: user1201_org1_test gidnumber: 10249 memberuid: user1201_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1227_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1227_org1_test +owneruid: user1227_org1_test gidnumber: 10244 memberuid: user1227_org1_test memberuid: user260_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1233_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1233_org1_test +owneruid: user1233_org1_test gidnumber: 10273 memberuid: user1233_org1_test memberuid: user465_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1234_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1234_org1_test +owneruid: user1234_org1_test gidnumber: 10282 memberuid: user1234_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1235_org3_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1235_org3_test +owneruid: user1235_org3_test gidnumber: 10041 memberuid: user1235_org3_test memberuid: user961_org3_test memberuid: user313_org3_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1246_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1246_org2_test +owneruid: user1246_org2_test gidnumber: 10049 memberuid: user1246_org2_test memberuid: user298_org2_test @@ -13526,40 +13802,44 @@ memberuid: user77_org2_test memberuid: user210_org2_test memberuid: user657_org2_test memberuid: user69_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1255_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1255_org1_test +owneruid: user1255_org1_test gidnumber: 10146 memberuid: user1255_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1260_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1260_org2_test +owneruid: user1260_org2_test gidnumber: 10043 memberuid: user1260_org2_test memberuid: user1215_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1280_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1280_org1_test +owneruid: user1280_org1_test gidnumber: 10109 memberuid: user1280_org1_test memberuid: user1183_org1_test memberuid: user1224_org1_test memberuid: user1012_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1292_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1292_org1_test +owneruid: user1292_org1_test gidnumber: 10032 memberuid: user1292_org1_test memberuid: user428_org1_test @@ -13580,24 +13860,26 @@ memberuid: user47_org1_test memberuid: user443_org1_test memberuid: user1044_org1_test memberuid: user255_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1293_org2_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1293_org2_test +owneruid: user1293_org2_test gidnumber: 10265 memberuid: user1293_org2_test memberuid: user537_org2_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top dn: cn=pi_user1298_org1_test,ou=pi_groups,dc=unityhpc,dc=test cn: pi_user1298_org1_test +owneruid: user1298_org1_test gidnumber: 10210 memberuid: user1298_org1_test -objectclass: piGroup +objectclass: unityGroup objectclass: posixGroup objectclass: top @@ -37304,35 +37586,13 @@ gecos: Melissa Price uid: user2005_org1_test uidnumber: 33130 -dn: cn=cs123_org1_test,ou=user_groups,dc=unityhpc,dc=test -objectClass: posixGroup -objectClass: top -gidNumber: 20005 -cn: cs123_org1_test - -dn: cn=cs123_org1_test,ou=users,dc=unityhpc,dc=test -objectClass: inetOrgPerson -objectClass: posixAccount -objectClass: top -objectClass: ldapPublicKey -uid: cs123_org1_test -givenName: cs123 -sn: Fall 2025 -gecos: cs123 Fall 2025 -mail: user1+cs123@org1.test -o: org1_test -homeDirectory: /home/cs123_org1_test -loginShell: /bin/bash -uidNumber: 20005 -gidNumber: 20005 -cn: cs123_org1_test - dn: cn=pi_cs123_org1_test,ou=pi_groups,dc=unityhpc,dc=test -objectclass: piGroup +objectclass: unityGroup objectClass: posixGroup objectClass: top gidNumber: 20007 cn: pi_cs123_org1_test -manageruid: user1_org1_test -memberuid: cs123_org1_test +owneruid: user1_org1_test +manageruid: user3_org1_test memberuid: user1_org1_test +memberuid: user3_org1_test diff --git a/webroot/admin/pi-mgmt.php b/webroot/admin/pi-mgmt.php index 18b1fb479..487d7d7e4 100644 --- a/webroot/admin/pi-mgmt.php +++ b/webroot/admin/pi-mgmt.php @@ -18,22 +18,26 @@ return new UnityUser(UnityHTTPD::getPostData("uid"), $LDAP, $SQL, $MAILER); }; +$getGroupFromPost = function () { + global $LDAP, $SQL, $MAILER; + return new UnityGroup(UnityHTTPD::getPostData("pi"), $LDAP, $SQL, $MAILER); +}; + if ($_SERVER["REQUEST_METHOD"] == "POST") { UnityHTTPD::validatePostCSRFToken(); switch ($_POST["form_type"]) { case "req": - $form_user = $getUserFromPost(); + $owner = $getUserFromPost(); + $group = $getGroupFromPost(); if ($_POST["action"] == "Approve") { - $group = $form_user->getPIGroup(); - $group->approveGroup(); + $group->approveGroup($owner->uid); } elseif ($_POST["action"] == "Deny") { - $group = $form_user->getPIGroup(); - $group->denyGroup(); + $group->denyGroup($owner->uid); } break; case "reqChild": $form_user = $getUserFromPost(); - $parent_group = new UnityGroup($_POST["pi"], $LDAP, $SQL, $MAILER); + $parent_group = $getGroupFromPost(); if ($_POST["action"] == "Approve") { $parent_group->approveUser($form_user); } elseif ($_POST["action"] == "Deny") { @@ -42,11 +46,11 @@ break; case "remUserChild": $form_user = $getUserFromPost(); - $parent = new UnityGroup($_POST["pi"], $LDAP, $SQL, $MAILER); + $parent = $getGroupFromPost(); $parent->removeUser($form_user, UnityGroupUserRemovedReason::RemovedByAdmin); break; case "disable": - $group = new UnityGroup(UnityHTTPD::getPostData("pi"), $LDAP, $SQL, $MAILER); + $group = $getGroupFromPost(); if ($group->getIsDisabled()) { UnityHTTPD::messageError("Cannot Disable PI Group", "Group is already disabled"); UnityHTTPD::redirect(); @@ -79,7 +83,7 @@ getRequests(UnitySQL::REQUEST_BECOME_PI); + $requests = $SQL->getRequests(UnitySQL::REQUEST_CREATE_PI_GROUP); foreach ($requests as $request) { $uid = $request["uid"]; @@ -132,7 +136,7 @@ usort($owner_attributes, fn($a, $b) => strcmp($a["uid"][0], $b["uid"][0])); foreach ($owner_attributes as $attributes) { $gecos = $attributes["gecos"][0]; - $gid = UnityGroup::OwnerUID2GID($attributes["uid"][0]); + $gid = UnityGroup::ownerUID2NamesakeGID($attributes["uid"][0]); $mail = $attributes["mail"][0]; echo " diff --git a/webroot/panel/account.php b/webroot/panel/account.php index 9dc6f4808..7a09494d2 100644 --- a/webroot/panel/account.php +++ b/webroot/panel/account.php @@ -105,23 +105,27 @@ UnityHTTPD::messageError("Cannot Submit PI Request", "Already a PI"); UnityHTTPD::redirect(); } - if ($SQL->requestExists($USER->uid, UnitySQL::REQUEST_BECOME_PI)) { + $group = $USER->getNamesakePIGroup(); + $request = "$USER->uid:$group->gid"; + if ($SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP)) { UnityHTTPD::messageError("Cannot Submit PI Request", "This request already exists"); UnityHTTPD::redirect(); } if ($_POST["tos"] != "agree") { UnityHTTPD::badRequest("user did not agree to terms of service"); } - $USER->getPIGroup()->requestGroup(); + $group->requestGroup($USER->uid); UnityHTTPD::messageSuccess("PI Group Requested", ""); UnityHTTPD::redirect(); break; /** @phpstan-ignore deadCode.unreachable */ case "cancel_pi_request": - if (!$SQL->requestExists($USER->uid, UnitySQL::REQUEST_BECOME_PI)) { + $group = $USER->getNamesakePIGroup(); + $request = "$USER->uid:$group->gid"; + if (!$SQL->requestExists($request, UnitySQL::REQUEST_CREATE_PI_GROUP)) { UnityHTTPD::messageError("Cannot Cancel PI Request", "No PI request found"); UnityHTTPD::redirect(); } - $USER->getPIGroup()->cancelGroupRequest(); + $group->cancelGroupRequest($USER->uid); UnityHTTPD::messageSuccess("PI Request Cancelled", ""); UnityHTTPD::redirect(); break; /** @phpstan-ignore deadCode.unreachable */ @@ -178,7 +182,7 @@

You are currently a principal investigator on the Unity HPC Platform.

"; } else { - if ($USER->getPIGroup()->exists() && $USER->getPIGroup()->getIsDisabled()) { + if ($USER->getNamesakePIGroup()->exists() && $USER->getNamesakePIGroup()->getIsDisabled()) { echo "

You are no longer a PI because your PI group is disabled.

"; } if ($USER->getFlag(UserFlag::QUALIFIED)) { @@ -217,7 +221,7 @@ > "; echo $CSRFTokenHiddenFormInput; - if ($SQL->requestExists($USER->uid, UnitySQL::REQUEST_BECOME_PI)) { + if ($SQL->requestExists($USER->uid, UnitySQL::REQUEST_CREATE_PI_GROUP)) { $onclick = "return confirm(\"Are you sure you want to cancel this request?\")"; echo ""; echo " @@ -227,7 +231,7 @@ "; } else { - if ($USER->getPIGroup()->exists() && $USER->getPIGroup()->getIsDisabled()) { + if ($USER->getNamesakePIGroup()->exists() && $USER->getNamesakePIGroup()->getIsDisabled()) { $button_msg = "Request to Re-Enable PI Group"; $onclick = "return confirm(\"Are you sure you want to re-enable your old PI group?\")"; } else { diff --git a/webroot/panel/modal/new_pi.php b/webroot/panel/modal/new_pi.php index 14c78bc89..c2578cedd 100644 --- a/webroot/panel/modal/new_pi.php +++ b/webroot/panel/modal/new_pi.php @@ -15,7 +15,7 @@ ); $pi_group_gid_to_owner_gecos_and_mail = []; foreach ($owner_attributes as $attributes) { - $gid = UnityGroup::ownerUID2GID($attributes["uid"][0]); + $gid = UnityGroup::ownerUID2NamesakeGID($attributes["uid"][0]); $pi_group_gid_to_owner_gecos_and_mail[$gid] = [$attributes["gecos"][0], $attributes["mail"][0]]; } $_SESSION["pi_group_gid_to_owner_gecos_and_mail"] = $pi_group_gid_to_owner_gecos_and_mail; diff --git a/webroot/panel/pi.php b/webroot/panel/pi.php index 7043b71da..204248454 100644 --- a/webroot/panel/pi.php +++ b/webroot/panel/pi.php @@ -17,7 +17,7 @@ UnityHTTPD::forbidden("not a manager of group '$gid'", "You cannot manage this group."); } } else { - $group = $USER->getPIGroup(); + $group = $USER->getNamesakePIGroup(); $user_is_owner = true; if (!$group->exists()) { UnityHTTPD::badRequest("not a PI", "You are not a PI."); diff --git a/workers/setup-pi-group-owners.php b/workers/setup-pi-group-owners.php new file mode 100755 index 000000000..7d0f431fc --- /dev/null +++ b/workers/setup-pi-group-owners.php @@ -0,0 +1,13 @@ +#!/usr/bin/env php +getPIGroupsAttributes(["cn"], filter: UnityLDAP::INCLUDE_DISABLED) as $attributes) { + $gid = $attributes["cn"][0]; + $entry = $LDAP->getPIGroupEntry($gid); + $entry->setAttribute("ownerUid", UnityGroup::NamesakeGID2OwnerUID($gid)); +} + diff --git a/workers/unity-course.php b/workers/unity-course.php index 889f6d00e..175dc5628 100755 --- a/workers/unity-course.php +++ b/workers/unity-course.php @@ -3,74 +3,49 @@ $_SERVER["HTTP_HOST"] = "course-creator"; // see deployment/overrides/course-creator include __DIR__ . "/init.php"; use UnityWebPortal\lib\UnityUser; -use UnityWebPortal\lib\UnityOrg; -use UnityWebPortal\lib\UserFlag; +use UnityWebPortal\lib\UnityGroup; -function cn2org($cn) -{ - $matches = []; - _preg_match("/.*_([^_]+_[^_]+)$/", $cn, $matches); - assert(count($matches) == 2, "failed to extract org from cn: '$cn'"); - return $matches[1]; -} - -// if array is length 1 then replace it with its one element -function flatten_attributes(array $attributes): array -{ - return array_map(fn($v) => count($v) === 1 ? $v[0] : $v, $attributes); -} - -$givenName = trim(readline("Enter the course ID (example: CS123): ")); -$sn = trim(readline("Enter the year and semester of the course (example: Fall 2025): ")); -$cn = strtolower( +$course_id = trim(readline("Enter the course ID (example: CS123): ")); +$course_notes = trim(readline("Enter the year and semester of the course (example: Fall 2025): ")); +$gid = strtolower( trim(readline("Please enter the cn to be used for the course (example: cs123_umass_edu): ")), ); +$owner_uid = trim( + readline( + "Enter the UID of the Unity admin responsible for the group (example: simonleary_umass_edu): ", + ), +); $manager_uid = trim( - readline("Enter the UID of the group manager (example: simonleary_umass_edu): "), + readline( + "Enter the UID of the faculty member responsible for the group (example: simonleary_umass_edu): ", + ), ); -$org_gid = cn2org($cn); + +$owner = new UnityUser($owner_uid, $LDAP, $SQL, $MAILER); +if (!$owner->exists()) { + _die("no such user: '$owner_uid'", 1); +} $manager = new UnityUser($manager_uid, $LDAP, $SQL, $MAILER); if (!$manager->exists()) { _die("no such user: '$manager_uid'", 1); } -$course_user = new UnityUser($cn, $LDAP, $SQL, $MAILER); -if ($course_user->exists()) { - $course_user_dn = $LDAP->getUserEntry($cn)->getDN(); - _die("course user already exists: '$course_user_dn'", 1); -} -$org = new UnityOrg($org_gid, $LDAP); -if (!$org->exists()) { - print "WARNING: creating new org '$org_gid'...\n"; -} -$mail = ""; // temporary empty mail -$course_user->init($givenName, $sn, $mail, $org_gid); -$course_user->setFlag(UserFlag::IMMORTAL, true, false, true); - -$course_pi_group = $course_user->getPIGroup(); -$course_user->setMail($course_pi_group->addPlusAddressToMail($manager->getMail())); - +$course_pi_group = new UnityGroup($gid, $LDAP, $SQL, $MAILER); if ($course_pi_group->exists()) { $course_pi_group_dn = $LDAP->getPIGroupEntry($course_pi_group->gid)->getDN(); _die("course PI group already exists: '$course_pi_group_dn'", 1); } -$course_pi_group->requestGroup(false, false); -$course_pi_group->approveGroup(); -$course_pi_group->newUserRequest($manager, false); -$course_pi_group->approveUser($manager); +$course_pi_group->requestGroup($owner_uid, send_mail: false, send_mail_to_admins: false); +$course_pi_group->approveGroup($owner_uid, send_mail: true); +$course_pi_group->newUserRequest($manager, send_mail: false); +$course_pi_group->approveUser($manager, send_mail: true); $course_pi_group->addManagerUID($manager_uid); -print "LDAP entries created:\n"; -print _json_encode( - [ - "course user" => flatten_attributes($LDAP->getUserEntry($cn)->getAttributes()), - "course user group" => flatten_attributes($LDAP->getUserGroupEntry($cn)->getAttributes()), - "course PI group" => flatten_attributes( - $LDAP->getPIGroupEntry($course_pi_group->gid)->getAttributes(), - ), - ], - JSON_PRETTY_PRINT, -); +$entry = $LDAP->getPIGroupEntry($course_pi_group->gid); +$entry->setAttribute("description", "$course_id $course_notes"); + +print "PI group created:\n"; +print _json_encode($entry->getAttributes(), JSON_PRETTY_PRINT); diff --git a/workers/user-expiry.php b/workers/user-expiry.php index 39a2500dc..d250f993f 100755 --- a/workers/user-expiry.php +++ b/workers/user-expiry.php @@ -46,7 +46,7 @@ foreach ($LDAP->getPIGroupsAttributes(["cn", "memberuid"], ["memberuid" => []]) as $attributes) { $pi_group_members[$attributes["cn"][0]] = $attributes["memberuid"]; } -$pi_group_owners = array_map(UnityGroup::GID2OwnerUID(...), array_keys($pi_group_members)); +$pi_group_owners = array_map(UnityGroup::NamesakeGID2OwnerUID(...), array_keys($pi_group_members)); $initially_idlelocked_users = $LDAP->userFlagGroups["idlelocked"]->getMemberUIDs(); $initially_disabled_users = $LDAP->userFlagGroups["disabled"]->getMemberUIDs(); @@ -135,7 +135,7 @@ function disableWarnUser(UnityUser $user, int $day) $idle_days = $uid_to_idle_days[$user->uid]; $expiration_date = date("Y/m/d", $last_login + $disable_day * 24 * 60 * 60); $is_final_warning = $day === $final_disable_warning_day; - $pi_group_gid = UnityGroup::ownerUID2GID($user->uid); + $pi_group_gid = UnityGroup::ownerUID2NamesakeGID($user->uid); $pi_group_member_uids = $pi_group_members[$pi_group_gid] ?? []; $mail_template_data = [ "user" => $user->uid,