Home | History | Annotate | Line # | Download | only in rpc.rusersd
      1  1.17     perry /*	$NetBSD: rusersd.c,v 1.17 2007/12/15 19:44:46 perry Exp $	*/
      2   1.9   thorpej 
      3   1.1    brezak /*-
      4   1.5    brezak  *  Copyright (c) 1993 John Brezak
      5   1.5    brezak  *  All rights reserved.
      6   1.5    brezak  *
      7   1.5    brezak  *  Redistribution and use in source and binary forms, with or without
      8   1.5    brezak  *  modification, are permitted provided that the following conditions
      9   1.5    brezak  *  are met:
     10   1.5    brezak  *  1. Redistributions of source code must retain the above copyright
     11   1.5    brezak  *     notice, this list of conditions and the following disclaimer.
     12   1.5    brezak  *  2. Redistributions in binary form must reproduce the above copyright
     13   1.5    brezak  *     notice, this list of conditions and the following disclaimer in the
     14   1.5    brezak  *     documentation and/or other materials provided with the distribution.
     15   1.5    brezak  *  3. The name of the author may not be used to endorse or promote products
     16   1.5    brezak  *     derived from this software without specific prior written permission.
     17   1.5    brezak  *
     18   1.5    brezak  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR
     19   1.5    brezak  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     20   1.5    brezak  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     21   1.5    brezak  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
     22   1.5    brezak  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     23   1.5    brezak  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     24   1.5    brezak  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     25   1.5    brezak  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     26   1.5    brezak  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
     27   1.5    brezak  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     28   1.5    brezak  * POSSIBILITY OF SUCH DAMAGE.
     29   1.1    brezak  */
     30   1.1    brezak 
     31  1.10  christos #include <sys/cdefs.h>
     32   1.4   mycroft #ifndef lint
     33  1.17     perry __RCSID("$NetBSD: rusersd.c,v 1.17 2007/12/15 19:44:46 perry Exp $");
     34   1.4   mycroft #endif /* not lint */
     35   1.4   mycroft 
     36   1.1    brezak #include <stdio.h>
     37   1.1    brezak #include <rpc/rpc.h>
     38  1.10  christos #include <sys/socket.h>
     39   1.1    brezak #include <signal.h>
     40   1.1    brezak #include <syslog.h>
     41  1.10  christos #include <stdlib.h>
     42   1.5    brezak #include <rpcsvc/rusers.h>	/* New version */
     43   1.5    brezak #include <rpcsvc/rnusers.h>	/* Old version */
     44   1.1    brezak 
     45  1.10  christos #include "rusers_proc.h"
     46  1.10  christos 
     47   1.1    brezak 
     48   1.1    brezak int from_inetd = 1;
     49   1.1    brezak 
     50  1.17     perry static void cleanup(int) __dead;
     51  1.10  christos 
     52  1.10  christos static void
     53  1.15  christos /*ARGSUSED*/
     54  1.13      fvdl cleanup(int n)
     55   1.1    brezak {
     56  1.11       mrg 
     57  1.13      fvdl 	(void) rpcb_unset(RUSERSPROG, RUSERSVERS_3, NULL);
     58  1.13      fvdl 	(void) rpcb_unset(RUSERSPROG, RUSERSVERS_IDLE, NULL);
     59   1.8   mycroft 	exit(0);
     60   1.1    brezak }
     61   1.1    brezak 
     62  1.10  christos int
     63  1.15  christos /*ARGSUSED*/
     64  1.13      fvdl main(int argc, char *argv[])
     65   1.1    brezak {
     66   1.1    brezak 	SVCXPRT *transp;
     67  1.14      fvdl 	struct sockaddr_storage from;
     68  1.16       mrg 	socklen_t fromlen;
     69   1.8   mycroft 
     70   1.8   mycroft 	/*
     71   1.8   mycroft 	 * See if inetd started us
     72   1.8   mycroft 	 */
     73   1.7   mycroft 	fromlen = sizeof(from);
     74  1.15  christos 	if (getsockname(0, (struct sockaddr *)(void *)&from, &fromlen) == -1)
     75   1.8   mycroft 		from_inetd = 0;
     76   1.8   mycroft 
     77   1.8   mycroft 	if (!from_inetd) {
     78  1.15  christos 		(void)daemon(0, 0);
     79   1.1    brezak 
     80  1.15  christos 		(void)rpcb_unset(RUSERSPROG, RUSERSVERS_3, NULL);
     81  1.15  christos 		(void)rpcb_unset(RUSERSPROG, RUSERSVERS_IDLE, NULL);
     82   1.2    brezak 
     83  1.15  christos 		(void)signal(SIGINT, cleanup);
     84  1.15  christos 		(void)signal(SIGTERM, cleanup);
     85  1.15  christos 		(void)signal(SIGHUP, cleanup);
     86   1.8   mycroft 	}
     87   1.1    brezak 
     88  1.12       mrg 	openlog("rpc.rusersd", LOG_PID, LOG_DAEMON);
     89  1.13      fvdl 
     90  1.13      fvdl 	if (from_inetd) {
     91  1.13      fvdl 		transp = svc_dg_create(0, 0, 0);
     92  1.13      fvdl 		if (transp == NULL) {
     93  1.13      fvdl 			syslog(LOG_ERR, "cannot create udp service.");
     94  1.15  christos 			return 1;
     95  1.13      fvdl 		}
     96  1.13      fvdl 		if (!svc_reg(transp, RUSERSPROG, RUSERSVERS_3, rusers_service,
     97  1.13      fvdl 		    NULL)) {
     98  1.13      fvdl 			syslog(LOG_ERR, "unable to register "
     99  1.13      fvdl 			    "(RUSERSPROG, RUSERSVERS_3).");
    100  1.15  christos 			return 1;
    101  1.13      fvdl 		}
    102  1.13      fvdl 		if (!svc_reg(transp, RUSERSPROG, RUSERSVERS_IDLE,
    103  1.13      fvdl 		    rusers_service, NULL)) {
    104  1.13      fvdl 			syslog(LOG_ERR, "unable to register "
    105  1.13      fvdl 			    "(RUSERSPROG, RUSERSVERS_IDLE).");
    106  1.15  christos 			return 1;
    107  1.13      fvdl 		}
    108  1.13      fvdl 	} else {
    109  1.13      fvdl 		if (!svc_create(rusers_service, RUSERSPROG, RUSERSVERS_3,
    110  1.13      fvdl 		    "udp")) {
    111  1.13      fvdl 			syslog(LOG_ERR, "unable to create "
    112  1.13      fvdl 			    "(RUSERSPROG, RUSERSVERS_3).");
    113  1.15  christos 			return 1;
    114  1.13      fvdl 		}
    115  1.13      fvdl 		if (!svc_create(rusers_service, RUSERSPROG, RUSERSVERS_IDLE,
    116  1.13      fvdl 		    "udp")) {
    117  1.13      fvdl 			syslog(LOG_ERR, "unable to create "
    118  1.13      fvdl 			    "(RUSERSPROG, RUSERSVERS_IDLE).");
    119  1.15  christos 			return 1;
    120  1.13      fvdl 		}
    121   1.1    brezak 	}
    122   1.1    brezak 
    123   1.8   mycroft 	svc_run();
    124   1.1    brezak 	syslog(LOG_ERR, "svc_run returned");
    125  1.15  christos 	return 1;
    126   1.1    brezak }
    127