{"record":{"id":"3c55daee5effdfa8","repo":"duplicati/duplicati","slug":"pureftpdtruncatedlisting","errorCode":"PureFTPdTruncatedListing","errorMessage":"PureFTPd server effectively truncated the listing due to LimitRecursion parameter - please check documentation for more information","messagePattern":"PureFTPd server effectively truncated the listing due to LimitRecursion parameter - please check documentation for more information","errorType":"exception","errorClass":"UserInformationException","httpStatus":null,"severity":"error","filePath":"Duplicati/Library/Backend/FTP/FTPBackend.cs","lineNumber":364,"sourceCode":"        public async IAsyncEnumerable<IFileEntry> ListAsync([EnumeratorCancellation] CancellationToken cancelToken)\r\n        {\r\n            FtpListItem[] items;\r\n            try\r\n            {\r\n                var client = await CreateClient(cancelToken).ConfigureAwait(false);\r\n                var remotePath = PreparePathForClient(null);\r\n\r\n                items = await Utility.Utility.WithTimeout(_timeouts.ListTimeout, cancelToken, ct =>\r\n                    client.GetListing(remotePath, FtpListOption.Modify | FtpListOption.Size, ct)\r\n                ).ConfigureAwait(false);\r\n\r\n                if (client.ServerType == FtpServer.PureFTPd)\r\n                {\r\n                    // If the list was truncated an exception has to be raised as the listing is incomplete and can lead to misleading backup/restore results\r\n                    if (client.LastReplies.Any(x =>\r\n                           x.Code == \"226\" &&\r\n                           x.Message.Contains(\"truncated\", StringComparison.InvariantCultureIgnoreCase)))\r\n                        throw new UserInformationException(\"PureFTPd server effectively truncated the listing due to LimitRecursion parameter - please check documentation for more information\", \"PureFTPdTruncatedListing\");\r\n\r\n                    // If no truncation occured and the ignore flag is not set, issue an advisory message\r\n                    if (!_IgnorePureFTPdLimitIssue)\r\n                        Log.WriteWarningMessage(LogTag, \"PureFTPdIssue\", null, Strings.DescriptionIgnorePureFTPLong);\r\n                }\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                TranslateException(null, e);\r\n                throw;\r\n            }\r\n\r\n            foreach (var item in items)\r\n            {\r\n                switch (item.Type)\r\n                {\r\n                    case FtpObjectType.Directory:\r\n                        if (item.Name == \".\" || item.Name == \"..\")\r","sourceCodeStart":346,"sourceCodeEnd":382,"githubUrl":"https://github.com/duplicati/duplicati/blob/3f348be3e33f5d72d414e3ad55839c2ba34dda67/Duplicati/Library/Backend/FTP/FTPBackend.cs#L346-L382","documentation":"Error \"PureFTPd server effectively truncated the listing due to LimitRecursion parameter - please check documentation for more information\" thrown in duplicati/duplicati.","triggerScenarios":"Thrown at Duplicati/Library/Backend/FTP/FTPBackend.cs:364 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Increase the PureFTPd LimitRecursion setting on the server.","Split the backup into multiple destinations/folders with fewer files.","Suppress the warning with the documented option if the file count is acceptable."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3f348be3e33f5d72d414e3ad55839c2ba34dda67","analyzedAt":"2026-08-13T16:48:27.008Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}