xref: /minix3/lib/libwrap/clean_exit.c (revision f1fab66e7dda396e0a899dafaddb9c3ac4edfcfe)
1*f1fab66eSDavid van Moolenbroek /*	$NetBSD: clean_exit.c,v 1.5 2012/03/21 10:10:37 matt Exp $	*/
2*f1fab66eSDavid van Moolenbroek 
3*f1fab66eSDavid van Moolenbroek  /*
4*f1fab66eSDavid van Moolenbroek   * clean_exit() cleans up and terminates the program. It should be called
5*f1fab66eSDavid van Moolenbroek   * instead of exit() when for some reason the real network daemon will not or
6*f1fab66eSDavid van Moolenbroek   * cannot be run. Reason: in the case of a datagram-oriented service we must
7*f1fab66eSDavid van Moolenbroek   * discard the not-yet received data from the client. Otherwise, inetd will
8*f1fab66eSDavid van Moolenbroek   * see the same datagram again and again, and go into a loop.
9*f1fab66eSDavid van Moolenbroek   *
10*f1fab66eSDavid van Moolenbroek   * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
11*f1fab66eSDavid van Moolenbroek   */
12*f1fab66eSDavid van Moolenbroek 
13*f1fab66eSDavid van Moolenbroek #include <sys/cdefs.h>
14*f1fab66eSDavid van Moolenbroek #ifndef lint
15*f1fab66eSDavid van Moolenbroek #if 0
16*f1fab66eSDavid van Moolenbroek static char sccsid[] = "@(#) clean_exit.c 1.4 94/12/28 17:42:19";
17*f1fab66eSDavid van Moolenbroek #else
18*f1fab66eSDavid van Moolenbroek __RCSID("$NetBSD: clean_exit.c,v 1.5 2012/03/21 10:10:37 matt Exp $");
19*f1fab66eSDavid van Moolenbroek #endif
20*f1fab66eSDavid van Moolenbroek #endif
21*f1fab66eSDavid van Moolenbroek 
22*f1fab66eSDavid van Moolenbroek #include <stdio.h>
23*f1fab66eSDavid van Moolenbroek #include <stdlib.h>
24*f1fab66eSDavid van Moolenbroek #include <unistd.h>
25*f1fab66eSDavid van Moolenbroek 
26*f1fab66eSDavid van Moolenbroek #include "tcpd.h"
27*f1fab66eSDavid van Moolenbroek 
28*f1fab66eSDavid van Moolenbroek /* clean_exit - clean up and exit */
29*f1fab66eSDavid van Moolenbroek 
30*f1fab66eSDavid van Moolenbroek void
clean_exit(struct request_info * request)31*f1fab66eSDavid van Moolenbroek clean_exit(struct request_info *request)
32*f1fab66eSDavid van Moolenbroek {
33*f1fab66eSDavid van Moolenbroek 
34*f1fab66eSDavid van Moolenbroek     /*
35*f1fab66eSDavid van Moolenbroek      * In case of unconnected protocols we must eat up the not-yet received
36*f1fab66eSDavid van Moolenbroek      * data or inetd will loop.
37*f1fab66eSDavid van Moolenbroek      */
38*f1fab66eSDavid van Moolenbroek 
39*f1fab66eSDavid van Moolenbroek     if (request->sink)
40*f1fab66eSDavid van Moolenbroek 	request->sink(request->fd);
41*f1fab66eSDavid van Moolenbroek 
42*f1fab66eSDavid van Moolenbroek     /*
43*f1fab66eSDavid van Moolenbroek      * Be kind to the inetd. We already reported the problem via the syslogd,
44*f1fab66eSDavid van Moolenbroek      * and there is no need for additional garbage in the logfile.
45*f1fab66eSDavid van Moolenbroek      */
46*f1fab66eSDavid van Moolenbroek 
47*f1fab66eSDavid van Moolenbroek     sleep(5);
48*f1fab66eSDavid van Moolenbroek     exit(0);
49*f1fab66eSDavid van Moolenbroek }
50