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. > Also worth noting is that cookies may represent other server-side > objects, in particular domains and networks. We can have multiple > domains per connection. The relationship between networks and > connections is complicated (and I don't pretend to understand it at the > moment either). I will be thinking about this too ... For domains & networks I imagine we'd just be passing a UUID / Name / ID across the wire to identify the object in question, as we do with the existing libvirt_proxy / qemu daemon ? Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|