[Help-gnutls] Re: Restore gnutls session after execvp - possible?
Simon Josefsson
jas at extundo.com
Sun Dec 11 22:46:15 CET 2005
Matthias Urlichs <smurf at smurf.noris.de> writes:
> Hi,
>
> Simon Josefsson:
>> How do you achieve that? I thought you had to close sockets and
>> re-open them in a new process.
>>
> If you have an open file descriptor, you can choose whether it is
> automagically closed when you execve() something. (fcntl, close-on-exec
> flag)
Oh. I see. Thanks for the pointer.
>> I don't know how to achieve what you want in GnuTLS, but I don't know
>> how to achieve what you already do either (exec another process and
>> inherit the open socket) so I may likely be missing something.
>> Perhaps others know more.
>>
> The basic idea is to save the internal gnutls data structure in such a
> way that you only need to plug in the file descriptor and everything is
> back where it was.
Right. I don't think this is possible.
The resume data that is stored is not intended for this use. It is
intended where you create a new connection and want to re-use earlier
TLS handshakes to optimize things.
It _may_ be possible to use the resume stuff for this purpose, most of
the useful data items are present. I think it require a new API.
E.g., gnutls_resume_connect that accept the resume data.
Further, I'm not sure I understand _why_ this is done. Perhaps if you
describe why you want to execvpe and carry over the TLS-protected
socket to the new process, we can suggest better solutions.
Still, if someone want to make this work, I'd welcome any patches.
> Personally I'd say that
>
>> > - global:
>> >
>> > gnutls_certificate_free_credentials (gnutls_xcred);
>> > gnutls_global_deinit();
>> >
> Why are you doing that? You're execvp-ing a new process, the data
> structures will vanish anyway -- and you risk closing the sockets when you
> do this.
I agree, although those functions should not close the socket.
>> > if (gnutls_handshake (server->gnutls_sess) < 0)
>> > printf ("handshake failed\n");
>> >
> Does that call work when you use it *before* doing your
> save-execvp-restore dance?
Most likely not.
/Simon
More information about the Gnutls-help
mailing list