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 Moolenbroekclean_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