From f31892044b733351e7cfe4ecca5401f650f630e4 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Fri, 27 Apr 2018 12:34:55 -0400 Subject: [PATCH] (sogo-tool) Fix ACLs restore in single store mode Fixes #4256 Fixes #4385 Fixes #4390 --- NEWS | 1 + SOPE/GDLContentStore/GCSFolder.m | 4 +++- Tools/SOGoToolRestore.m | 17 ++++++++++++----- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index ae049b344..fd27a57f8 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,7 @@ Enhancements Bug fixes - [core] properly update the last-modified attribute (#4313) - [core] fixed default data value for c_hascertificate (#4442) + - [core] fixed ACLs restoration with sogo-tool in single store mode (#4385) - [web] prevent deletion of special folders using del key - [web] fixed SAML2 session timeout handling during XHR requests - [web] fixed renaming a folder under iOS diff --git a/SOPE/GDLContentStore/GCSFolder.m b/SOPE/GDLContentStore/GCSFolder.m index 68ba9bbed..cf9c57d9b 100644 --- a/SOPE/GDLContentStore/GCSFolder.m +++ b/SOPE/GDLContentStore/GCSFolder.m @@ -1650,11 +1650,13 @@ andAttribute: (EOAttribute *)_attribute sql = [NSMutableString stringWithCapacity:256]; [sql appendString:@"DELETE FROM "]; [sql appendString:[self aclTableName]]; + if ([GCSFolderManager singleStoreMode]) + [sql appendFormat:@" WHERE c_folder_id = %@", folderId]; qSql = [self _sqlForQualifier: [_fs qualifier]]; if (qSql) { if ([GCSFolderManager singleStoreMode]) - [sql appendFormat:@" WHERE c_folder_id = %@ AND (%@)", folderId, qSql]; + [sql appendFormat:@" AND (%@)", qSql]; else [sql appendFormat:@" WHERE %@", qSql]; } diff --git a/Tools/SOGoToolRestore.m b/Tools/SOGoToolRestore.m index aea3c2336..38441501d 100644 --- a/Tools/SOGoToolRestore.m +++ b/Tools/SOGoToolRestore.m @@ -348,11 +348,18 @@ userRoles = [[acl objectForKey: currentUser] objectEnumerator]; while ((currentRole = [userRoles nextObject])) { - SQL = [NSString stringWithFormat: @"INSERT INTO %@" - @" (c_object, c_uid, c_role)" - @" VALUES ('%@', '%@', '%@')", - aclTableName, - folderPath, currentUser, currentRole]; + if ([GCSFolderManager singleStoreMode]) + SQL = [NSString stringWithFormat: @"INSERT INTO %@" + @" (c_object, c_uid, c_role, c_folder_id)" + @" VALUES ('%@', '%@', '%@', %@)", + aclTableName, + folderPath, currentUser, currentRole, [gcsFolder folderId]]; + else + SQL = [NSString stringWithFormat: @"INSERT INTO %@" + @" (c_object, c_uid, c_role)" + @" VALUES ('%@', '%@', '%@')", + aclTableName, + folderPath, currentUser, currentRole]; [channel evaluateExpressionX: SQL]; } }