Add the "-p" option, which allows to specify a port which the daemon
should bind to. PR: bin/100969 Reviewed by: alfred@ MFC after: 1 week
This commit is contained in:
parent
d7b9f1a7cd
commit
a25d27fb0f
@ -92,13 +92,17 @@ main(argc, argv)
|
|||||||
char **argv;
|
char **argv;
|
||||||
{
|
{
|
||||||
SVCXPRT *transp;
|
SVCXPRT *transp;
|
||||||
int ch, i, maxindex, s;
|
int ch, i, maxindex, r, s, sock;
|
||||||
|
struct sockaddr_in sin;
|
||||||
|
struct sockaddr_in6 sin6;
|
||||||
|
char *endptr;
|
||||||
struct sigaction sigalarm;
|
struct sigaction sigalarm;
|
||||||
int grace_period = 30;
|
int grace_period = 30;
|
||||||
struct netconfig *nconf;
|
struct netconfig *nconf;
|
||||||
int maxrec = RPC_MAXDATASIZE;
|
int maxrec = RPC_MAXDATASIZE;
|
||||||
|
in_port_t svcport = 0;
|
||||||
|
|
||||||
while ((ch = getopt(argc, argv, "d:g:")) != (-1)) {
|
while ((ch = getopt(argc, argv, "d:g:p:")) != (-1)) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'd':
|
case 'd':
|
||||||
debug_level = atoi(optarg);
|
debug_level = atoi(optarg);
|
||||||
@ -114,6 +118,13 @@ main(argc, argv)
|
|||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'p':
|
||||||
|
endptr = NULL;
|
||||||
|
svcport = (in_port_t)strtoul(optarg, &endptr, 10);
|
||||||
|
if (endptr == NULL || *endptr != '\0' ||
|
||||||
|
svcport == 0 || svcport >= IPPORT_MAX)
|
||||||
|
usage();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
case '?':
|
case '?':
|
||||||
usage();
|
usage();
|
||||||
@ -141,16 +152,81 @@ main(argc, argv)
|
|||||||
maxindex = 4;
|
maxindex = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (svcport != 0) {
|
||||||
|
bzero(&sin, sizeof(struct sockaddr_in));
|
||||||
|
sin.sin_len = sizeof(struct sockaddr_in);
|
||||||
|
sin.sin_family = AF_INET;
|
||||||
|
sin.sin_port = htons(svcport);
|
||||||
|
|
||||||
|
bzero(&sin6, sizeof(struct sockaddr_in6));
|
||||||
|
sin6.sin6_len = sizeof(struct sockaddr_in6);
|
||||||
|
sin6.sin6_family = AF_INET6;
|
||||||
|
sin6.sin6_port = htons(svcport);
|
||||||
|
}
|
||||||
|
|
||||||
rpc_control(RPC_SVC_CONNMAXREC_SET, &maxrec);
|
rpc_control(RPC_SVC_CONNMAXREC_SET, &maxrec);
|
||||||
|
|
||||||
for (i = 0; i < maxindex; i++) {
|
for (i = 0; i < maxindex; i++) {
|
||||||
nconf = getnetconfigent(transports[i]);
|
nconf = getnetconfigent(transports[i]);
|
||||||
if (nconf == NULL)
|
if (nconf == NULL)
|
||||||
errx(1, "cannot get %s netconf: %s.", transports[i],
|
errx(1, "cannot get %s netconf: %s.", transports[i],
|
||||||
nc_sperror());
|
nc_sperror());
|
||||||
|
|
||||||
|
if (svcport != 0) {
|
||||||
|
if (strcmp(nconf->nc_netid, "udp6") == 0) {
|
||||||
|
sock = socket(AF_INET6, SOCK_DGRAM,
|
||||||
|
IPPROTO_UDP);
|
||||||
|
if (sock != -1) {
|
||||||
|
r = bindresvport_sa(sock,
|
||||||
|
(struct sockaddr *)&sin6);
|
||||||
|
if (r != 0) {
|
||||||
|
syslog(LOG_ERR, "bindresvport: %m");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp(nconf->nc_netid, "udp") == 0) {
|
||||||
|
sock = socket(AF_INET, SOCK_DGRAM,
|
||||||
|
IPPROTO_UDP);
|
||||||
|
if (sock != -1) {
|
||||||
|
r = bindresvport(sock, &sin);
|
||||||
|
if (r != 0) {
|
||||||
|
syslog(LOG_ERR, "bindresvport: %m");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp(nconf->nc_netid, "tcp6") == 0) {
|
||||||
|
sock = socket(AF_INET6, SOCK_STREAM,
|
||||||
|
IPPROTO_TCP);
|
||||||
|
if (sock != -1) {
|
||||||
|
r = bindresvport_sa(sock,
|
||||||
|
(struct sockaddr *)&sin6);
|
||||||
|
if (r != 0) {
|
||||||
|
syslog(LOG_ERR, "bindresvport: %m");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp(nconf->nc_netid, "tcp") == 0) {
|
||||||
|
sock = socket(AF_INET, SOCK_STREAM,
|
||||||
|
IPPROTO_TCP);
|
||||||
|
if (sock != -1) {
|
||||||
|
r = bindresvport(sock, &sin);
|
||||||
|
if (r != 0) {
|
||||||
|
syslog(LOG_ERR, "bindresvport: %m");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
transp = svc_tli_create(sock, nconf, NULL,
|
||||||
|
RPC_MAXDATASIZE, RPC_MAXDATASIZE);
|
||||||
|
} else {
|
||||||
|
transp = svc_tli_create(RPC_ANYFD, nconf, NULL,
|
||||||
|
RPC_MAXDATASIZE, RPC_MAXDATASIZE);
|
||||||
|
}
|
||||||
|
|
||||||
transp = svc_tli_create(RPC_ANYFD, nconf, NULL,
|
|
||||||
RPC_MAXDATASIZE, RPC_MAXDATASIZE);
|
|
||||||
if (transp == NULL) {
|
if (transp == NULL) {
|
||||||
errx(1, "cannot create %s service.", transports[i]);
|
errx(1, "cannot create %s service.", transports[i]);
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
@ -223,7 +299,8 @@ sigalarm_handler(void)
|
|||||||
void
|
void
|
||||||
usage()
|
usage()
|
||||||
{
|
{
|
||||||
errx(1, "usage: rpc.lockd [-d <debuglevel>] [-g <grace period>]");
|
errx(1, "usage: rpc.lockd [-d <debuglevel>]"
|
||||||
|
" [-g <grace period>] [-p <port>]");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd September 24, 1995
|
.Dd April 3, 2007
|
||||||
.Dt RPC.LOCKD 8
|
.Dt RPC.LOCKD 8
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -43,6 +43,7 @@
|
|||||||
.Nm
|
.Nm
|
||||||
.Op Fl d Ar debug_level
|
.Op Fl d Ar debug_level
|
||||||
.Op Fl g Ar grace period
|
.Op Fl g Ar grace period
|
||||||
|
.Op Fl p Ar port
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
The
|
The
|
||||||
.Nm
|
.Nm
|
||||||
@ -83,6 +84,12 @@ During the grace period
|
|||||||
only accepts requests from hosts which are reinitialising locks which
|
only accepts requests from hosts which are reinitialising locks which
|
||||||
existed before the server restart.
|
existed before the server restart.
|
||||||
Default is 30 seconds.
|
Default is 30 seconds.
|
||||||
|
.It Fl p
|
||||||
|
The
|
||||||
|
.Fl p
|
||||||
|
option allow to force the daemon to bind to the specified
|
||||||
|
.Ar port ,
|
||||||
|
for both AF_INET and AF_INET6 address families.
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
Error conditions are logged to syslog, irrespective of the debug level,
|
Error conditions are logged to syslog, irrespective of the debug level,
|
||||||
|
Loading…
Reference in New Issue
Block a user