[libvirt] [PATCH] ServerClient: Flush SASL data

Jiri Denemark jdenemar at redhat.com
Tue Nov 1 13:26:51 UTC 2011


On Tue, Nov 01, 2011 at 14:14:54 +0100, Michal Privoznik wrote:
> If daemon is using SASL it reads client data into a cache. This cache is
> big (usually 65KB) and can thus contain 2 or more messages. However,
> on socket event we can dispatch only one message. So if we read two
> messages at once, the second will not be dispatched as the socket event
> goes away with filling the cache.
> Moreover, when dispatching the cache we need to remember to take care
> of client max requests limit.
> ---
>  src/rpc/virnetserverclient.c |   34 +++++++++++++++++++++++++++++++++-
>  1 files changed, 33 insertions(+), 1 deletions(-)
> 
> diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c
> index 1256f0f..69af746 100644
> --- a/src/rpc/virnetserverclient.c
> +++ b/src/rpc/virnetserverclient.c
...
> @@ -204,6 +220,19 @@ static void virNetServerClientUpdateEvent(virNetServerClientPtr client)
>      mode = virNetServerClientCalculateHandleMode(client);
>  
>      virNetSocketUpdateIOCallback(client->sock, mode);
> +#ifdef HAVE_SASL
> +    if (client->nrequests < client->nrequests_max &&
> +        client->rx &&
> +        virNetSocketHasCachedData(client->sock)) {
> +        if (client->sasl_timer)
> +            virEventUpdateTimeout(client->sasl_timer, 0);
> +        else
> +            client->sasl_timer = virEventAddTimeout(0,
> +                                                    virNetServerClientDispatchReadTimerFunc,
> +                                                    client,
> +                                                    NULL);
> +    }
> +#endif

Is it all really SASL-only? I think we should remove all the ifdefs (and
rename sasl_timer to something like cached_timer) to enable the code everytime
virNetSocketHasCachedData returns true. The thing that SASL is currently the
only layer that caches data (which may not even be true, I haven't checked),
it may change in the future, e.g., when adding libssh2 transport.

Jirka




More information about the libvir-list mailing list