LdapConnection.GetPartialResults() fails with timeout in Linux
#100.442 aberto em 29 de mar. de 2024
Métricas do repositório
- Stars
- (17.886 stars)
- Métricas de merge de PR
- (Mesclagem média 12d 11h) (661 fundiu PRs em 30d)
Description
Description
Hi! I use System.DirectoryServices.Protocols LdapConnection.GetPartialResults() with AD. I've found that behavior of client at Windows and Linux is differs.
"System.DirectoryServices.Protocols" Version="8.0.0" (net8)
At windows it work as expected. At linux GetPartialResults() throws error with timeout:
System.DirectoryServices.Protocols.LdapException: The operation was aborted because the client side timeout limit was exceeded.
at System.DirectoryServices.Protocols.LdapPartialResultsProcessor.GetPartialResults(LdapPartialAsyncResult asyncResult)
Increasing the timeout causes the operation stuck (operation never ends).
I don't understand, how it must be used properly for Linux.
Usage:
var sendRequestAsyncResult = ldapConnection.BeginSendRequest(request, PartialResultProcessing.ReturnPartialResults, null, ldapConnection);
var result = new List<SearchResultEntry>();
while (!cancellationToken.IsCancellationRequested && !sendRequestAsyncResult.IsCompleted)
{
PartialResultsCollection partialResults;
try
{
cancellationToken.ThrowIfCancellationRequested();
if (sendRequestAsyncResult.IsCompleted)
return result;
partialResults = ldapConnection.GetPartialResults(sendRequestAsyncResult);
}
#pragma warning disable S2737
catch (DirectoryOperationException e) when (e.Message.Equals("The size limit was exceeded", StringComparison.Ordinal))
{
throw;
//return result;
}
#pragma warning restore S2737
var entries = partialResults.OfType<SearchResultEntry>().ToList();
if (entries.Count > 0) //in Linux count is 0
{
result.AddRange(entries);
}
}
If I use SendRequest(), it's works correctly. GetPartialResults() didn't work correctly with same request.
Reproduction Steps
use LdapConnection.GetPartialResults() and SendRequests(), results are differs.
Expected behavior
IMHO, results of GetPartialResults() process and SendRequests() must be equal.
Actual behavior
timeout occurs without any understandable reasons
Regression?
No response
Known Workarounds
No response
Configuration
Linux (ubuntu 20.04) ActiveDirectory LDAPv3
Other information
No response