Author: baggins Date: Mon Sep 27 09:22:55 2010 GMT Module: packages Tag: HEAD ---- Log message: - rel 3 - make '-h' option work for both UDP and TCP sockets (NACKed by upstream, despite it's not interfering with NFS, is run-tested and works fine. See http://www.spinics.net/lists/linux-nfs/msg15949.html for gory details)
---- Files affected: packages/rpcbind: rpcbind.spec (1.18 -> 1.19) , rpcbind-tcp-addrs.patch (NONE -> 1.1) (NEW) ---- Diffs: ================================================================ Index: packages/rpcbind/rpcbind.spec diff -u packages/rpcbind/rpcbind.spec:1.18 packages/rpcbind/rpcbind.spec:1.19 --- packages/rpcbind/rpcbind.spec:1.18 Fri Sep 17 14:14:06 2010 +++ packages/rpcbind/rpcbind.spec Mon Sep 27 11:22:50 2010 @@ -3,7 +3,7 @@ Summary(pl.UTF-8): Demon odwzorowujący adresy uniwersalne na numery programów RPC Name: rpcbind Version: 0.2.0 -Release: 2 +Release: 3 License: GPL Group: Daemons Source0: http://dl.sourceforge.net/rpcbind/%{name}-%{version}.tar.bz2 @@ -16,6 +16,7 @@ Patch3: %{name}-usage.patch Patch4: %{name}-SO_REUSEADDR.patch Patch5: %{name}-nofork.patch +Patch6: %{name}-tcp-addrs.patch # http://nfsv4.bullopensource.org/doc/tirpc_rpcbind.php URL: http://sourceforge.net/projects/rpcbind/ BuildRequires: autoconf @@ -54,6 +55,7 @@ %patch3 -p1 %patch4 -p1 %patch5 -p1 +%patch6 -p1 %build %{__libtoolize} @@ -118,6 +120,13 @@ All persons listed below can be reached at <cvs_login>@pld-linux.org $Log$ +Revision 1.19 2010/09/27 09:22:50 baggins +- rel 3 +- make '-h' option work for both UDP and TCP sockets + (NACKed by upstream, despite it's not interfering with NFS, is + run-tested and works fine. + See http://www.spinics.net/lists/linux-nfs/msg15949.html for gory details) + Revision 1.18 2010/09/17 12:14:06 baggins - rel 2 - bugfixes from upstream ================================================================ Index: packages/rpcbind/rpcbind-tcp-addrs.patch diff -u /dev/null packages/rpcbind/rpcbind-tcp-addrs.patch:1.1 --- /dev/null Mon Sep 27 11:22:55 2010 +++ packages/rpcbind/rpcbind-tcp-addrs.patch Mon Sep 27 11:22:50 2010 @@ -0,0 +1,243 @@ +diff --git a/src/rpcbind.c b/src/rpcbind.c +index 63023e1..310c243 100644 +--- a/src/rpcbind.c ++++ b/src/rpcbind.c +@@ -275,7 +275,7 @@ init_transport(struct netconfig *nconf) + int status; /* bound checking ? */ + int aicode; + int addrlen = 0; +- int nhostsbak; ++ int nhostsbak = 1; + int checkbind; + int on = 1; + struct sockaddr *sa = NULL; +@@ -301,18 +301,6 @@ init_transport(struct netconfig *nconf) + } + #endif + +- /* +- * XXX - using RPC library internal functions. For NC_TPI_CLTS +- * we call this later, for each socket we like to bind. +- */ +- if (nconf->nc_semantics != NC_TPI_CLTS) { +- if ((fd = __rpc_nconf2fd(nconf)) < 0) { +- syslog(LOG_ERR, "cannot create socket for %s", +- nconf->nc_netid); +- return (1); +- } +- } +- + if (!__rpc_nconf2sockinfo(nconf, &si)) { + syslog(LOG_ERR, "cannot get information for %s", + nconf->nc_netid); +@@ -335,8 +323,6 @@ init_transport(struct netconfig *nconf) + hints.ai_family = si.si_af; + hints.ai_socktype = si.si_socktype; + hints.ai_protocol = si.si_proto; +- } +- if (nconf->nc_semantics == NC_TPI_CLTS) { + /* + * If no hosts were specified, just bind to INADDR_ANY. Otherwise + * make sure 127.0.0.1 is added to the list. +@@ -354,21 +340,15 @@ init_transport(struct netconfig *nconf) + } else + return 1; + } +- +- /* +- * Bind to specific IPs if asked to +- */ +- checkbind = 0; +- while (nhostsbak > 0) { +- --nhostsbak; +- /* +- * XXX - using RPC library internal functions. +- */ +- if ((fd = __rpc_nconf2fd(nconf)) < 0) { +- syslog(LOG_ERR, "cannot create socket for %s", +- nconf->nc_netid); +- return (1); +- } ++ } ++ /* ++ * Bind to specific IPs if asked to ++ */ ++ checkbind = 0; ++ while (nhostsbak > 0) { ++ --nhostsbak; ++ if ((strcmp(nconf->nc_netid, "local") != 0) && ++ (strcmp(nconf->nc_netid, "unix") != 0)) { + switch (hints.ai_family) { + case AF_INET: + if (inet_pton(AF_INET, hosts[nhostsbak], +@@ -395,7 +375,7 @@ init_transport(struct netconfig *nconf) + host_addr) == 1) + continue; + } +- break; ++ break; + default: + break; + } +@@ -418,97 +398,37 @@ init_transport(struct netconfig *nconf) + } + addrlen = res->ai_addrlen; + sa = (struct sockaddr *)res->ai_addr; +- oldmask = umask(S_IXUSR|S_IXGRP|S_IXOTH); +- if (bind(fd, sa, addrlen) != 0) { +- syslog(LOG_ERR, "cannot bind %s on %s: %m", +- (hosts[nhostsbak] == NULL) ? "*" : +- hosts[nhostsbak], nconf->nc_netid); +- if (res != NULL) +- freeaddrinfo(res); +- continue; +- } else +- checkbind++; +- (void) umask(oldmask); ++ } + +- /* Copy the address */ +- taddr.addr.maxlen = taddr.addr.len = addrlen; +- taddr.addr.buf = malloc(addrlen); +- if (taddr.addr.buf == NULL) { +- syslog(LOG_ERR, +- "cannot allocate memory for %s address", +- nconf->nc_netid); ++ /* ++ * XXX - using RPC library internal functions. ++ */ ++ if ((fd = __rpc_nconf2fd(nconf)) < 0) { ++ syslog(LOG_ERR, "cannot create socket for %s", ++ nconf->nc_netid); ++ continue; ++ } ++ oldmask = umask(S_IXUSR|S_IXGRP|S_IXOTH); ++ if (nconf->nc_semantics != NC_TPI_CLTS) { ++ __rpc_fd2sockinfo(fd, &si); ++ if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, ++ sizeof(on)) != 0) { ++ syslog(LOG_ERR, "cannot set SO_REUSEADDR on %s", ++ nconf->nc_netid); + if (res != NULL) + freeaddrinfo(res); +- return 1; +- } +- memcpy(taddr.addr.buf, sa, addrlen); +-#ifdef RPCBIND_DEBUG +- if (debugging) { +- /* +- * for debugging print out our universal +- * address +- */ +- char *uaddr; +- struct netbuf nb; +- int sa_size = 0; +- +- nb.buf = sa; +- switch( sa->sa_family){ +- case AF_INET: +- sa_size = sizeof (struct sockaddr_in); +- break; +- case AF_INET6: +- sa_size = sizeof (struct sockaddr_in6); +- break; +- } +- nb.len = nb.maxlen = sa_size; +- uaddr = taddr2uaddr(nconf, &nb); +- (void) fprintf(stderr, +- "rpcbind : my address is %s\n", uaddr); +- (void) free(uaddr); +- } +-#endif +- my_xprt = (SVCXPRT *)svc_tli_create(fd, nconf, &taddr, +- RPC_MAXDATASIZE, RPC_MAXDATASIZE); +- if (my_xprt == (SVCXPRT *)NULL) { +- syslog(LOG_ERR, "%s: could not create service", +- nconf->nc_netid); +- goto error; +- } +- } +- if (!checkbind) +- return 1; +- } else { /* NC_TPI_COTS */ +- if ((strcmp(nconf->nc_netid, "local") != 0) && +- (strcmp(nconf->nc_netid, "unix") != 0)) { +- if ((aicode = getaddrinfo(NULL, servname, &hints, &res))!= 0) { +- if ((aicode = getaddrinfo(NULL, "portmapper", &hints, &res))!= 0) { +- printf("cannot get local address for %s: %s", nconf->nc_netid, gai_strerror(aicode)); +- syslog(LOG_ERR, +- "cannot get local address for %s: %s", +- nconf->nc_netid, gai_strerror(aicode)); +- return 1; +- } ++ continue; + } +- addrlen = res->ai_addrlen; +- sa = (struct sockaddr *)res->ai_addr; +- } +- oldmask = umask(S_IXUSR|S_IXGRP|S_IXOTH); +- __rpc_fd2sockinfo(fd, &si); +- if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, +- sizeof(on)) != 0) { +- syslog(LOG_ERR, "cannot set SO_REUSEADDR on %s", +- nconf->nc_netid); +- if (res != NULL) +- freeaddrinfo(res); +- return 1; + } + if (bind(fd, sa, addrlen) < 0) { +- syslog(LOG_ERR, "cannot bind %s: %m", nconf->nc_netid); ++ syslog(LOG_ERR, "cannot bind %s on %s: %m", ++ (hosts && hosts[nhostsbak]) ? hosts[nhostsbak] : "*", ++ nconf->nc_netid); + if (res != NULL) + freeaddrinfo(res); +- return 1; +- } ++ continue; ++ } else ++ checkbind++; + (void) umask(oldmask); + + /* Copy the address */ +@@ -527,7 +447,7 @@ init_transport(struct netconfig *nconf) + /* for debugging print out our universal address */ + char *uaddr; + struct netbuf nb; +- int sa_size2 = 0; ++ int sa_size2 = 0; + + nb.buf = sa; + switch( sa->sa_family){ +@@ -546,7 +466,8 @@ init_transport(struct netconfig *nconf) + } + #endif + +- listen(fd, SOMAXCONN); ++ if (nconf->nc_semantics != NC_TPI_CLTS) ++ listen(fd, SOMAXCONN); + + my_xprt = (SVCXPRT *)svc_tli_create(fd, nconf, &taddr, RPC_MAXDATASIZE, RPC_MAXDATASIZE); + if (my_xprt == (SVCXPRT *)NULL) { +@@ -555,6 +476,8 @@ init_transport(struct netconfig *nconf) + goto error; + } + } ++ if (!checkbind) ++ return 1; + + #ifdef PORTMAP + /* +diff --git a/man/rpcbind.8 b/man/rpcbind.8 +index c5b8fb7..aa53a25 100644 +--- a/man/rpcbind.8 ++++ b/man/rpcbind.8 +@@ -85,7 +85,7 @@ checks are shown in detail. + .It Fl f + Do not fork and become a background process. + .It Fl h +-Specify specific IP addresses to bind to for UDP requests. ++Specify specific IP addresses to bind to for requests. + This option + may be specified multiple times and is typically necessary when running + on a multi-homed host. ================================================================ ---- CVS-web: http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/rpcbind/rpcbind.spec?r1=1.18&r2=1.19&f=u _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
