diff options
Diffstat (limited to 'libexec/rpc.sprayd/sprayd.c')
-rw-r--r-- | libexec/rpc.sprayd/sprayd.c | 169 |
1 files changed, 0 insertions, 169 deletions
diff --git a/libexec/rpc.sprayd/sprayd.c b/libexec/rpc.sprayd/sprayd.c deleted file mode 100644 index 28ae295fad05..000000000000 --- a/libexec/rpc.sprayd/sprayd.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (c) 1994 Christos Zoulas - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Christos Zoulas. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $Id: sprayd.c,v 1.7 1995/03/26 23:36:44 mycroft Exp $ - */ - -#ifndef lint -static char rcsid[] = "$Id: sprayd.c,v 1.7 1995/03/26 23:36:44 mycroft Exp $"; -#endif /* not lint */ - -#include <stdio.h> -#include <stdlib.h> -#include <signal.h> -#include <unistd.h> -#include <rpc/rpc.h> -#include <rpc/pmap_clnt.h> -#include <sys/time.h> -#include <sys/socket.h> -#include <syslog.h> -#include <rpcsvc/spray.h> - -static void spray_service __P((struct svc_req *, SVCXPRT *)); - -static int from_inetd = 1; - -#define timersub(tvp, uvp, vvp) \ - do { \ - (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \ - (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \ - if ((vvp)->tv_usec < 0) { \ - (vvp)->tv_sec--; \ - (vvp)->tv_usec += 1000000; \ - } \ - } while (0) - -#define TIMEOUT 120 - -void -cleanup() -{ - (void) pmap_unset(SPRAYPROG, SPRAYVERS); - exit(0); -} - -void -die() -{ - exit(0); -} - -int -main(argc, argv) - int argc; - char *argv[]; -{ - SVCXPRT *transp; - int sock = 0; - int proto = 0; - struct sockaddr_in from; - int fromlen; - - /* - * See if inetd started us - */ - fromlen = sizeof(from); - if (getsockname(0, (struct sockaddr *)&from, &fromlen) < 0) { - from_inetd = 0; - sock = RPC_ANYSOCK; - proto = IPPROTO_UDP; - } - - if (!from_inetd) { - daemon(0, 0); - - (void) pmap_unset(SPRAYPROG, SPRAYVERS); - - (void) signal(SIGINT, cleanup); - (void) signal(SIGTERM, cleanup); - (void) signal(SIGHUP, cleanup); - } else { - (void) signal(SIGALRM, die); - alarm(TIMEOUT); - } - - openlog("rpc.sprayd", LOG_CONS|LOG_PID, LOG_DAEMON); - - transp = svcudp_create(sock); - if (transp == NULL) { - syslog(LOG_ERR, "cannot create udp service."); - return 1; - } - if (!svc_register(transp, SPRAYPROG, SPRAYVERS, spray_service, proto)) { - syslog(LOG_ERR, - "unable to register (SPRAYPROG, SPRAYVERS, %s).", - proto ? "udp" : "(inetd)"); - return 1; - } - - svc_run(); - syslog(LOG_ERR, "svc_run returned"); - return 1; -} - - -static void -spray_service(rqstp, transp) - struct svc_req *rqstp; - SVCXPRT *transp; -{ - static spraycumul scum; - static struct timeval clear, get; - - switch (rqstp->rq_proc) { - case SPRAYPROC_CLEAR: - scum.counter = 0; - (void) gettimeofday(&clear, 0); - /*FALLTHROUGH*/ - - case NULLPROC: - (void)svc_sendreply(transp, xdr_void, (char *)NULL); - return; - - case SPRAYPROC_SPRAY: - scum.counter++; - return; - - case SPRAYPROC_GET: - (void) gettimeofday(&get, 0); - timersub(&get, &clear, &get); - scum.clock.sec = get.tv_sec; - scum.clock.usec = get.tv_usec; - break; - - default: - svcerr_noproc(transp); - return; - } - - if (!svc_sendreply(transp, xdr_spraycumul, (caddr_t)&scum)) { - svcerr_systemerr(transp); - syslog(LOG_ERR, "bad svc_sendreply"); - } -} |