]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix upgrade of user_ldap when oc_group_members contains duplicated uids 42576/head
authorCôme Chilliet <come.chilliet@nextcloud.com>
Thu, 4 Jan 2024 10:12:03 +0000 (11:12 +0100)
committerCôme Chilliet <91878298+come-nc@users.noreply.github.com>
Thu, 4 Jan 2024 10:51:33 +0000 (11:51 +0100)
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
apps/user_ldap/lib/Migration/Version1190Date20230706134108.php

index 3f554f56e64362b9e7acd72f9fcc83c58781b8e8..71fdb536b1af3e00c3231216851dcbcf6f10dfab 100644 (file)
@@ -99,13 +99,21 @@ class Version1190Date20230706134108 extends SimpleMigrationStep {
                $result = $query->executeQuery();
                while ($row = $result->fetch()) {
                        $knownUsers = unserialize($row['owncloudusers']);
+                       $knownUsers = array_unique($knownUsers);
                        foreach ($knownUsers as $knownUser) {
-                               $insert
-                                       ->setParameter('groupid', $row['owncloudname'])
-                                       ->setParameter('userid', $knownUser)
-                               ;
+                               try {
+                                       $insert
+                                               ->setParameter('groupid', $row['owncloudname'])
+                                               ->setParameter('userid', $knownUser)
+                                       ;
 
-                               $insert->executeStatement();
+                                       $insert->executeStatement();
+                               } catch (\OCP\DB\Exception $e) {
+                                       /*
+                                        * If it fails on unique constaint violation it may just be left over value from previous half-migration
+                                        * If it fails on something else, ignore as well, data will be filled by background job later anyway
+                                        */
+                               }
                        }
                }
                $result->closeCursor();