https://bugs.openldap.org/show_bug.cgi?id=9798

          Issue ID: 9798
           Summary: Clearing pending ops on Bind
           Product: OpenLDAP
           Version: unspecified
          Hardware: All
                OS: All
            Status: UNCONFIRMED
          Keywords: needs_review
          Severity: normal
          Priority: ---
         Component: slapd
          Assignee: [email protected]
          Reporter: [email protected]
  Target Milestone: ---

Some context first.

The only universal way of reset an arbitrary (SASL) bind in progress, at least
in my reading of RFC4511 is to send an anonymous bind op, so that's what the
load balancer does when needed (the client goes away, etc.).

Incidentally, this is also what the balancer chooses to do when the pending
bind needs to be "abandoned" when the backend doesn't respond within a
configured timeout. That's skating the edge of what RFC4511 allows, probably
just past it.

The issue:
When slapd receives a bind and another operation X (lloadd sends the above
mentioned "reset" bind) before that first bind starts processing, X gets added
into conn->c_ops_pending and does c_n_pending_ops++. Bind then eventually
invokes connection_abandon which forgets to zero out c_n_pending_ops and the
connection remains unusable forever. On the surface that's trivial to fix and a
fix is coming.

On the other hand, operation X in the pending list is actually discarded too,
so that kind of defeats the idea of trying to "abandon" the original bind and
completely reset the connection state. Question is, do we want to retain the
last bind in the pending list or does the balancer have to destroy the
connection unconditionally when a bind times out?

-- 
You are receiving this mail because:
You are on the CC list for the issue.

Reply via email to