Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Jun 1999 14:11:26 +0100
From:      David Malone <dwmalone@maths.tcd.ie>
To:        freebsd-hackers@freebsd.org
Subject:   Inetd and wrapping.
Message-ID:   <9906181411.aa23134@salmon.maths.tcd.ie>

next in thread | raw e-mail | index | archive | help
Sheldon and myself have been looking at the wrapping support in inetd, and
I'd be interested to hear what people think on the following issues.

	David.


Making wrapping a run time option:
	It seems strange to make wrapping a compile time option,
	when it could be a command line option, or a per service
	option in inetd.conf? I'd suggest that we have two command
	line options, one which disables wrapping all together and
	one which disables it for internal services.

Wrapping dgram services:
	If our inetd wrapping is to replace tcpd we need to be able
	to wrap the initial connection to udp based services. The
	man page should make it clear that it can only check the
	first connection to the service, and after that the service
	is on its own.

	An interesting question is, should we try to do this in a
	clever fashion, or should we stick with something simple.
	The simple implimentation looks like:

		fork(); if( rejected ) exit() else provide_serivce();

	The clever implimentation would look like:

		fork; while( rejected && !timedout ) { get new packet };
		if( timedout ) exit() else provide_service();

	The clever one reduces forks, but as inetd isn't the place
	where high performance services are provided from the extra
	complexity may not be worth it.

Making internal services cleverer if they have forked:
	If an internal udp service has forked it could provide its
	service using a similar loop to the one for clever UDP
	wrapping. This would reduce the amount of forking. Is it
	worth the extra complexity?

Trying to wrap stream/wait services:
	Doing this would involve being able to find the address of
	the next connection on a listening socket without calling
	accept.  AFAIK this isn't possible with the normal socket
	interface, and isn't supported by tcpd. We should probably
	just say this isn't possible in the man page?

Wrapping of weirder types:
	According to the inetd man page we support sockets of type:
	``stream'', ``dgram'', ``raw'', ``rdm'', or ``seqpacket''.
	I (personally) have never seen any inetd services using
	raw, rdm or seqpacket - is it worth providing wrapping for
	these socket types?

Adding wrapper support to "wait" daemons:
	Daemons that use the "wait" class can only have their first
	successful connection wrapped by inetd, and then they are
	free to accept or reject subsequent connections themselves
	until they exit. Usually they have a timeout (identd,
	talkd), or only serve one connection (tftpd, rpc.rstatd).

	Should we go around and try to add wrapper support into
	these services?


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi? <9906181411.aa23134>