[Libvir] Remote patch, 2007/02/19
Richard W.M. Jones
rjones at redhat.com
Fri Feb 23 12:52:18 UTC 2007
Daniel P. Berrange wrote:
> On Fri, Feb 23, 2007 at 10:37:32AM +0000, Richard W.M. Jones wrote:
>> Daniel P. Berrange wrote:
>>> On Wed, Feb 21, 2007 at 06:13:40PM +0000, Richard W.M. Jones wrote:
>>>> Daniel P. Berrange wrote:
>>>>
>>>>> With that in mind I'd venture to suggest we ditch the whole idea of
>>>>> cookies
>>>>> completely.
>>>>>
>>>>> Every method on the server end is already given a
>>>>>
>>>>> 'struct svc_req *req'
>>>>>
>>>>> This struct contains a field
>>>>>
>>>>> ' SVCXPRT *rq_xprt;'
>>>>>
>>>>> Which represents the data transport of the client. And the SVCXPRT struct
>>>>> has as its first member the ' int xp_sock' which is the socket
>>>>> associated
>>>>> with the client.
>>>>>
>>>>> So we can trivially & securely map from a client's TCP connetion to the
>>>>> virConnectPtr without needing any magic cookies.
>>>> What concerns me here is that xp_sock is just a file descriptor and fds
>>>> can be reused. It is also an fd that could be any of:
>>>> * a TCPv6 socket
>>>> * a TCPv4 socket
>>>> * a Unix domain socket
>>>> * on the client side, a socketpair (which on Linux is a funny type of
>>>> Unix domain socket)
>>>> So finding something unique about it may be tricky. What happens if two
>>>> clients connect in succession over the local Unix domain socket?
>>> I've just noticed that since we are providing our own server side transport
>>> implementations in sunrpc/svc_{tcp,ext,gnutls}.c we already have a place
>>> where we can safely put in cleanup hooks. In the 'svctcp_destroy' just
>>> after we call 'xprt_unregister' we can call out to purge client state
>>> associated with that FD. This ensures that we cleanup state before any new
>>> connection can re-use the same FD number. So there's actually no need to
>>> replace the svc_run() method in this case after all.
>> I was hoping to avoid this. Note that the contents of the sunrpc/
>> subdirectory (the client and server transports) are independent of
>> libvirt and I hoped to publish them separately so they could be reused
>> in other places. The other problem is the Unix transport, where we use
>> the transport from glibc directly.
>
> To keep them untied from libvirt one could allow a generic 'void (*cleanup)(void *)'
> callback to be passed into the create methods for each transport, and simply
> invoke that from the descructor. We'd need to provide an alternate impl for
> hte Unix transport too.
Yes! Implemented!!
Rich.
--
Emerging Technologies, Red Hat http://et.redhat.com/~rjones/
64 Baker Street, London, W1U 7DF Mobile: +44 7866 314 421
"[Negative numbers] darken the very whole doctrines of the equations
and make dark of the things which are in their nature excessively
obvious and simple" (Francis Maseres FRS, mathematician, 1759)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3237 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20070223/09667d2c/attachment-0001.bin>
More information about the libvir-list
mailing list