forked from rpms/rpcbind
Update to latest upstream release: 0.1.7
This commit is contained in:
parent
eb199b6520
commit
208b1ff52b
@ -2,3 +2,4 @@ rpcbind-0.1.4.tar.bz2
|
||||
rpcbind-0.1.5.tar.bz2
|
||||
rpcbind-1.0.6.tar.bz2
|
||||
rpcbind-0.1.6.tar.bz2
|
||||
rpcbind-0.1.7.tar.bz2
|
||||
|
@ -1,146 +0,0 @@
|
||||
commit 3e4c74ab527375f37b6633f528e7eab0c363967b
|
||||
Author: Olaf Kirch <okir@suse.de>
|
||||
Date: Tue Sep 16 10:08:35 2008 -0400
|
||||
|
||||
Introduce helpers for ipprot/netid mapping
|
||||
|
||||
There's a couple of places in the portmap emulation code
|
||||
where we translate between ip protocol numbers and netids.
|
||||
Encapsulate these in two helper functions:
|
||||
|
||||
extern char *pmap_ipprot2netid(int);
|
||||
extern int pmap_netid2ipprot(const char *);
|
||||
|
||||
Signed-off-by: okir@suse.de
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/src/pmap_svc.c b/src/pmap_svc.c
|
||||
index 99ce508..02a57d2 100644
|
||||
--- a/src/pmap_svc.c
|
||||
+++ b/src/pmap_svc.c
|
||||
@@ -211,11 +211,8 @@ pmapproc_change(struct svc_req *rqstp /*__unused*/, SVCXPRT *xprt, unsigned long
|
||||
if (op == PMAPPROC_SET) {
|
||||
char buf[32];
|
||||
|
||||
- if (reg.pm_prot == IPPROTO_UDP) {
|
||||
- rpcbreg.r_netid = udptrans;
|
||||
- } else if (reg.pm_prot == IPPROTO_TCP) {
|
||||
- rpcbreg.r_netid = tcptrans;
|
||||
- } else {
|
||||
+ rpcbreg.r_netid = pmap_ipprot2netid(reg.pm_prot);
|
||||
+ if (rpcbreg.r_netid == NULL) {
|
||||
ans = FALSE;
|
||||
goto done_change;
|
||||
}
|
||||
@@ -289,7 +286,8 @@ pmapproc_getport(struct svc_req *rqstp /*__unused*/, SVCXPRT *xprt)
|
||||
svc_getrpccaller(xprt));
|
||||
fprintf(stderr, "PMAP_GETPORT req for (%lu, %lu, %s) from %s :",
|
||||
reg.pm_prog, reg.pm_vers,
|
||||
- reg.pm_prot == IPPROTO_UDP ? "udp" : "tcp", uaddr);
|
||||
+ pmap_ipprot2netid(reg.pm_prot)?: "<invalid>",
|
||||
+ uaddr);
|
||||
free(uaddr);
|
||||
}
|
||||
#endif
|
||||
@@ -299,12 +297,13 @@ pmapproc_getport(struct svc_req *rqstp /*__unused*/, SVCXPRT *xprt)
|
||||
char *pt1, *pt2;
|
||||
char *netid;
|
||||
|
||||
+ netid = pmap_ipprot2netid(reg.pm_prot);
|
||||
+ if (netid == NULL)
|
||||
+ goto sendreply;
|
||||
if (reg.pm_prot == IPPROTO_UDP) {
|
||||
ua = udp_uaddr;
|
||||
- netid = udptrans;
|
||||
} else {
|
||||
ua = tcp_uaddr; /* To get the len */
|
||||
- netid = tcptrans;
|
||||
}
|
||||
if (ua == NULL) {
|
||||
goto sendreply;
|
||||
@@ -341,7 +340,7 @@ sendreply:
|
||||
fprintf(stderr, "port = %d\n", port);
|
||||
#endif
|
||||
rpcbs_getaddr(RPCBVERS_2_STAT, reg.pm_prog, reg.pm_vers,
|
||||
- reg.pm_prot == IPPROTO_UDP ? udptrans : tcptrans,
|
||||
+ pmap_ipprot2netid(reg.pm_prot) ?: "<unknown>",
|
||||
port ? udptrans : "");
|
||||
|
||||
return (TRUE);
|
||||
@@ -372,4 +371,24 @@ pmapproc_dump(struct svc_req *rqstp /*__unused*/, SVCXPRT *xprt)
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
+int pmap_netid2ipprot(const char *netid)
|
||||
+{
|
||||
+ if (!netid)
|
||||
+ return 0;
|
||||
+ if (strcmp(netid, tcptrans) == 0)
|
||||
+ return IPPROTO_TCP;
|
||||
+ if (strcmp(netid, udptrans) == 0)
|
||||
+ return IPPROTO_UDP;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+char *pmap_ipprot2netid(unsigned long proto)
|
||||
+{
|
||||
+ if (proto == IPPROTO_UDP)
|
||||
+ return udptrans;
|
||||
+ if (proto == IPPROTO_TCP)
|
||||
+ return tcptrans;
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
#endif /* PORTMAP */
|
||||
diff --git a/src/rpcb_svc_com.c b/src/rpcb_svc_com.c
|
||||
index 8f6b4c7..08aa194 100644
|
||||
--- a/src/rpcb_svc_com.c
|
||||
+++ b/src/rpcb_svc_com.c
|
||||
@@ -1416,13 +1416,8 @@ add_pmaplist(RPCB *arg)
|
||||
struct pmap pmap;
|
||||
struct pmaplist *pml;
|
||||
|
||||
- if (strcmp(arg->r_netid, udptrans) == 0) {
|
||||
- /* It is UDP! */
|
||||
- pmap.pm_prot = IPPROTO_UDP;
|
||||
- } else if (strcmp(arg->r_netid, tcptrans) == 0) {
|
||||
- /* It is TCP */
|
||||
- pmap.pm_prot = IPPROTO_TCP;
|
||||
- } else
|
||||
+ pmap.pm_prot = pmap_netid2ipprot(arg->r_netid);
|
||||
+ if (!pmap.pm_prot)
|
||||
/* Not an IP protocol */
|
||||
return (0);
|
||||
|
||||
@@ -1464,15 +1459,10 @@ del_pmaplist(RPCB *arg)
|
||||
struct pmaplist *prevpml, *fnd;
|
||||
unsigned long prot;
|
||||
|
||||
- if (strcmp(arg->r_netid, udptrans) == 0) {
|
||||
- /* It is UDP! */
|
||||
- prot = IPPROTO_UDP;
|
||||
- } else if (strcmp(arg->r_netid, tcptrans) == 0) {
|
||||
- /* It is TCP */
|
||||
- prot = IPPROTO_TCP;
|
||||
- } else if (arg->r_netid[0] == 0) {
|
||||
+ if (arg->r_netid[0] == 0) {
|
||||
prot = 0; /* Remove all occurrences */
|
||||
- } else {
|
||||
+ } else
|
||||
+ if ((prot = pmap_netid2ipprot(arg->r_netid)) == 0) {
|
||||
/* Not an IP protocol */
|
||||
return (0);
|
||||
}
|
||||
diff --git a/src/rpcbind.h b/src/rpcbind.h
|
||||
index 84deba0..58ab3ef 100644
|
||||
--- a/src/rpcbind.h
|
||||
+++ b/src/rpcbind.h
|
||||
@@ -78,6 +78,8 @@ extern char *udptrans; /* Name of UDP transport */
|
||||
extern char *tcptrans; /* Name of TCP transport */
|
||||
extern char *udp_uaddr; /* Universal UDP address */
|
||||
extern char *tcp_uaddr; /* Universal TCP address */
|
||||
+extern char *pmap_ipprot2netid(unsigned long);
|
||||
+extern int pmap_netid2ipprot(const char *);
|
||||
#endif
|
||||
|
||||
int add_bndlist(struct netconfig *, struct netbuf *);
|
@ -1,107 +0,0 @@
|
||||
commit 1a94b830a6b5a248faa6fa0e4b7818d9394f6369
|
||||
Author: Olaf Kirch <okir@suse.de>
|
||||
Date: Tue Sep 16 10:15:39 2008 -0400
|
||||
|
||||
Change how we decide on the netids to use for portmap
|
||||
|
||||
The current code will try to use either udp or udp6, and either tcp or
|
||||
tcp6 for its portmap emulation code. Enabling eg both tcp6 and tcp in
|
||||
the netconfig file will cause error messages, and cause rpcbind to not
|
||||
register itself on the second transport (tcp).
|
||||
|
||||
This is not what we want.
|
||||
|
||||
I believe portmap emulation should only be enabled over IPv4.
|
||||
There's no point in enabling it over IPv6.
|
||||
|
||||
Signed-off-by: okir@suse.de
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/src/rpcbind.c b/src/rpcbind.c
|
||||
index 5e7e744..dc6f66b 100644
|
||||
--- a/src/rpcbind.c
|
||||
+++ b/src/rpcbind.c
|
||||
@@ -167,10 +167,6 @@ main(int argc, char *argv[])
|
||||
syslog(LOG_ERR, "could not read /etc/netconfig");
|
||||
exit(1);
|
||||
}
|
||||
-#ifdef PORTMAP
|
||||
- udptrans = "";
|
||||
- tcptrans = "";
|
||||
-#endif
|
||||
|
||||
nconf = getnetconfigent("local");
|
||||
if (nconf == NULL)
|
||||
@@ -190,6 +186,13 @@ main(int argc, char *argv[])
|
||||
}
|
||||
endnetconfig(nc_handle);
|
||||
|
||||
+#ifdef PORTMAP
|
||||
+ if (!udptrans)
|
||||
+ udptrans = "";
|
||||
+ if (!tcptrans)
|
||||
+ tcptrans = "";
|
||||
+#endif
|
||||
+
|
||||
/* catch the usual termination signals for graceful exit */
|
||||
(void) signal(SIGCHLD, reap);
|
||||
(void) signal(SIGINT, terminate);
|
||||
@@ -545,15 +548,12 @@ init_transport(struct netconfig *nconf)
|
||||
|
||||
#ifdef PORTMAP
|
||||
/*
|
||||
- * Register both the versions for tcp/ip, udp/ip and local.
|
||||
+ * Register both the versions for tcp/ip, udp/ip.
|
||||
*/
|
||||
- if (((strcmp(nconf->nc_protofmly, NC_INET) == 0 ||
|
||||
- strcmp(nconf->nc_protofmly, NC_INET6) == 0) &&
|
||||
- (strcmp(nconf->nc_proto, NC_TCP) == 0 ||
|
||||
- strcmp(nconf->nc_proto, NC_UDP) == 0)) ||
|
||||
- (strcmp(nconf->nc_netid, "unix") == 0) ||
|
||||
- (strcmp(nconf->nc_netid, "local") == 0)) {
|
||||
+ if (si.si_af == AF_INET &&
|
||||
+ (si.si_proto == IPPROTO_TCP || si.si_proto == IPPROTO_UDP)) {
|
||||
struct pmaplist *pml;
|
||||
+
|
||||
if (!svc_register(my_xprt, PMAPPROG, PMAPVERS,
|
||||
pmap_service, 0)) {
|
||||
syslog(LOG_ERR, "could not register on %s",
|
||||
@@ -568,30 +568,18 @@ init_transport(struct netconfig *nconf)
|
||||
pml->pml_map.pm_prog = PMAPPROG;
|
||||
pml->pml_map.pm_vers = PMAPVERS;
|
||||
pml->pml_map.pm_port = PMAPPORT;
|
||||
- if (strcmp(nconf->nc_proto, NC_TCP) == 0) {
|
||||
- if (tcptrans[0]) {
|
||||
- syslog(LOG_ERR,
|
||||
- "cannot have more than one TCP transport");
|
||||
- goto error;
|
||||
- }
|
||||
- tcptrans = strdup(nconf->nc_netid);
|
||||
- pml->pml_map.pm_prot = IPPROTO_TCP;
|
||||
+ pml->pml_map.pm_prot = si.si_proto;
|
||||
|
||||
- /* Let's snarf the universal address */
|
||||
- /* "h1.h2.h3.h4.p1.p2" */
|
||||
+ /* Stash away the universal address */
|
||||
+ switch (si.si_proto) {
|
||||
+ case IPPROTO_TCP:
|
||||
+ tcptrans = strdup(nconf->nc_netid);
|
||||
tcp_uaddr = taddr2uaddr(nconf, &taddr.addr);
|
||||
- } else if (strcmp(nconf->nc_proto, NC_UDP) == 0) {
|
||||
- if (udptrans[0]) {
|
||||
- syslog(LOG_ERR,
|
||||
- "cannot have more than one UDP transport");
|
||||
- goto error;
|
||||
- }
|
||||
+ break;
|
||||
+ case IPPROTO_UDP:
|
||||
udptrans = strdup(nconf->nc_netid);
|
||||
- pml->pml_map.pm_prot = IPPROTO_UDP;
|
||||
-
|
||||
- /* Let's snarf the universal address */
|
||||
- /* "h1.h2.h3.h4.p1.p2" */
|
||||
udp_uaddr = taddr2uaddr(nconf, &taddr.addr);
|
||||
+ break;
|
||||
}
|
||||
pml->pml_next = list_pml;
|
||||
list_pml = pml;
|
@ -1,113 +0,0 @@
|
||||
commit 566f261ff6bae2842e2e64aaf70d2e31acc1efe7
|
||||
Author: Olaf Kirch <okir@suse.de>
|
||||
Date: Tue Sep 16 10:23:48 2008 -0400
|
||||
|
||||
Simplify port live check in pmap_svc.c
|
||||
|
||||
There's some hack in pmap_getport that will cause a service
|
||||
to be unregistered from the portmap list if we find the port
|
||||
is no longer in use. Apart from being a gross hack, it is
|
||||
also a rather inefficient hack. Since we now restrict pmap
|
||||
emulation to IPv4, we know the address is always 0.0.0.0,
|
||||
so no need to mess with uaddr strings.
|
||||
|
||||
(The bind_check code is a huge messy no-op anyway, since
|
||||
all ports are added with bind_check = FALSE).
|
||||
|
||||
Signed-off-by: okir@suse.de
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/src/pmap_svc.c b/src/pmap_svc.c
|
||||
index 02a57d2..7a4f059 100644
|
||||
--- a/src/pmap_svc.c
|
||||
+++ b/src/pmap_svc.c
|
||||
@@ -293,40 +293,24 @@ pmapproc_getport(struct svc_req *rqstp /*__unused*/, SVCXPRT *xprt)
|
||||
#endif
|
||||
fnd = find_service_pmap(reg.pm_prog, reg.pm_vers, reg.pm_prot);
|
||||
if (fnd) {
|
||||
- char serveuaddr[32], *ua;
|
||||
- char *pt1, *pt2;
|
||||
+ char serveuaddr[32];
|
||||
char *netid;
|
||||
|
||||
netid = pmap_ipprot2netid(reg.pm_prot);
|
||||
- if (netid == NULL)
|
||||
- goto sendreply;
|
||||
- if (reg.pm_prot == IPPROTO_UDP) {
|
||||
- ua = udp_uaddr;
|
||||
- } else {
|
||||
- ua = tcp_uaddr; /* To get the len */
|
||||
- }
|
||||
- if (ua == NULL) {
|
||||
- goto sendreply;
|
||||
- }
|
||||
- if ((pt1 = strrchr(ua, '.')) != NULL) {
|
||||
- *pt1 = 0;
|
||||
- if ((pt2 = strrchr(ua, '.')) != NULL) {
|
||||
- *pt2 = 0;
|
||||
- snprintf(serveuaddr, sizeof serveuaddr,
|
||||
- "%s.%ld.%ld", ua,
|
||||
- (fnd->pml_map.pm_port >> 8) & 0xff,
|
||||
- (fnd->pml_map.pm_port) & 0xff);
|
||||
- *pt2 = '.';
|
||||
- if (is_bound(netid, serveuaddr)) {
|
||||
- port = fnd->pml_map.pm_port;
|
||||
- } else { /* this service is dead; delete it */
|
||||
- delete_prog(reg.pm_prog);
|
||||
- }
|
||||
+ if (netid != NULL) {
|
||||
+ snprintf(serveuaddr, sizeof serveuaddr,
|
||||
+ "0.0.0.0.%ld.%ld",
|
||||
+ (fnd->pml_map.pm_port >> 8) & 0xff,
|
||||
+ (fnd->pml_map.pm_port) & 0xff);
|
||||
+
|
||||
+ if (is_bound(netid, serveuaddr)) {
|
||||
+ port = fnd->pml_map.pm_port;
|
||||
+ } else { /* this service is dead; delete it */
|
||||
+ delete_prog(reg.pm_prog);
|
||||
}
|
||||
- *pt1 = '.';
|
||||
}
|
||||
}
|
||||
-sendreply:
|
||||
+
|
||||
lport = port;
|
||||
if ((!svc_sendreply(xprt, (xdrproc_t) xdr_long, (caddr_t)&lport)) &&
|
||||
debugging) {
|
||||
diff --git a/src/rpcbind.c b/src/rpcbind.c
|
||||
index dc6f66b..e0e7ddf 100644
|
||||
--- a/src/rpcbind.c
|
||||
+++ b/src/rpcbind.c
|
||||
@@ -570,18 +570,15 @@ init_transport(struct netconfig *nconf)
|
||||
pml->pml_map.pm_port = PMAPPORT;
|
||||
pml->pml_map.pm_prot = si.si_proto;
|
||||
|
||||
- /* Stash away the universal address */
|
||||
switch (si.si_proto) {
|
||||
case IPPROTO_TCP:
|
||||
tcptrans = strdup(nconf->nc_netid);
|
||||
- tcp_uaddr = taddr2uaddr(nconf, &taddr.addr);
|
||||
break;
|
||||
case IPPROTO_UDP:
|
||||
udptrans = strdup(nconf->nc_netid);
|
||||
- udp_uaddr = taddr2uaddr(nconf, &taddr.addr);
|
||||
break;
|
||||
}
|
||||
- pml->pml_next = list_pml;
|
||||
+ pml->pml_next = list_pml;
|
||||
list_pml = pml;
|
||||
|
||||
/* Add version 3 information */
|
||||
diff --git a/src/rpcbind.h b/src/rpcbind.h
|
||||
index 58ab3ef..295711a 100644
|
||||
--- a/src/rpcbind.h
|
||||
+++ b/src/rpcbind.h
|
||||
@@ -76,8 +76,6 @@ extern rpcblist_ptr list_rbl; /* A list of version 3 & 4 rpcbind services */
|
||||
extern struct pmaplist *list_pml; /* A list of version 2 rpcbind services */
|
||||
extern char *udptrans; /* Name of UDP transport */
|
||||
extern char *tcptrans; /* Name of TCP transport */
|
||||
-extern char *udp_uaddr; /* Universal UDP address */
|
||||
-extern char *tcp_uaddr; /* Universal TCP address */
|
||||
extern char *pmap_ipprot2netid(unsigned long);
|
||||
extern int pmap_netid2ipprot(const char *);
|
||||
#endif
|
14
rpcbind.spec
14
rpcbind.spec
@ -1,8 +1,8 @@
|
||||
%{!?_initdir:%define _initdir /etc/rc.d/init.d}
|
||||
|
||||
Name: rpcbind
|
||||
Version: 0.1.6
|
||||
Release: 3%{?dist}
|
||||
Version: 0.1.7
|
||||
Release: 1%{?dist}
|
||||
Summary: Universal Addresses to RPC Program Number Mapper
|
||||
Group: System Environment/Daemons
|
||||
License: GPL
|
||||
@ -25,10 +25,6 @@ Requires(post): /sbin/chkconfig
|
||||
Provides: portmap = %{version}-%{release}
|
||||
Obsoletes: portmap <= 4.0-65.3
|
||||
|
||||
Patch01: rpcbind-0.1.6-ipprot2netid.patch
|
||||
Patch02: rpcbind-0.1.6-pmap-ipv4-only.patch
|
||||
Patch03: rpcbind-0.1.6-pmap-no-uaddrs.patch
|
||||
|
||||
%description
|
||||
The rpcbind utility is a server that converts RPC program numbers into
|
||||
universal addresses. It must be running on the host to be able to make
|
||||
@ -36,9 +32,6 @@ RPC calls on a server on that machine.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch01 -p1
|
||||
%patch02 -p1
|
||||
%patch03 -p1
|
||||
|
||||
%build
|
||||
%ifarch s390 s390x
|
||||
@ -118,6 +111,9 @@ fi
|
||||
%dir %attr(700,rpc,rpc) /var/lib/rpcbind
|
||||
|
||||
%changelog
|
||||
* Wed Nov 19 2008 Steve Dickson <steved@redhat.com> 0.1.7-1
|
||||
- Update to latest upstream release: 0.1.7
|
||||
|
||||
* Tue Sep 30 2008 Steve Dickson <steved@redhat.com> 0.1.6-3
|
||||
- Fixed a typo in the rpcbind.init script that stop warm starts
|
||||
from happening with conrestarts
|
||||
|
Loading…
Reference in New Issue
Block a user