* Copyright (c) 1989 The Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* Rick Macklem at The University of Guelph.
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
"@(#) Copyright (c) 1989 Regents of the University of California.\n\
static char sccsid
[] = "@(#)nfsd.c 5.3 (Berkeley) %G%";
#include <sys/socketvar.h>
#include <rpc/pmap_clnt.h>
#include <rpc/pmap_prot.h>
#define syslog(e, s) fprintf(stderr,(s))
* Nfs server daemon mostly just a user context for nfssvc()
* 1 - do file descriptor and signal cleanup
* 2 - create server socket
* 3 - register socket with portmap
struct sockaddr_in saddr
;
(void) open("/dev/null", O_RDONLY
);
(void) open("/dev/null", O_WRONLY
);
{ int tt
= open("/dev/tty", O_RDWR
);
ioctl(tt
, TIOCNOTTY
, (char *)0);
signal(SIGTSTP
, SIG_IGN
);
signal(SIGTTIN
, SIG_IGN
);
signal(SIGTTOU
, SIG_IGN
);
signal(SIGQUIT
, SIG_IGN
);
signal(SIGTERM
, SIG_IGN
);
openlog("nfsd:", LOG_PID
, LOG_DAEMON
);
if ((sock
= socket(AF_INET
, SOCK_DGRAM
, 0)) < 0) {
syslog(LOG_ERR
, "Can't create socket");
saddr
.sin_family
= AF_INET
;
saddr
.sin_addr
.s_addr
= INADDR_ANY
;
saddr
.sin_port
= htons(NFS_PORT
);
if (bind(sock
, &saddr
, sizeof(saddr
)) < 0) {
syslog(LOG_ERR
, "Can't bind addr");
pmap_unset(RPCPROG_NFS
, NFS_VER2
);
if (!pmap_set(RPCPROG_NFS
, NFS_VER2
, IPPROTO_UDP
, NFS_PORT
)) {
syslog(LOG_ERR
, "Can't register with portmap");
if ((cnt
= atoi(argv
[1])) <= 0 || cnt
> 20)
if ((cnt
= atoi(argv
[1])) <= 0 || cnt
> 20)
msk
= inet_addr(argv
[2]);
mtch
= inet_addr(argv
[3]);
for (i
= 1; i
< cnt
; i
++)
if (nfssvc(sock
, msk
, mtch
) < 0) /* Only returns on error */
syslog(LOG_ERR
, "nfssvc() failed %m");