- PLD merge, updated to 0.2.4
[packages/rpcbind.git] / rpcbind-tcp-addrs.patch
index 43ffd2f4ef63090e09331bd837cb61fd00a9b211..0edc59b563e524ea4cf9d5039c1f12edd543ed6a 100644 (file)
@@ -1,8 +1,7 @@
-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)
+diff -ur rpcbind-0.2.3.orig/src/rpcbind.c rpcbind-0.2.3/src/rpcbind.c
+--- rpcbind-0.2.3.orig/src/rpcbind.c   2015-04-27 16:07:43.000000000 +0200
++++ rpcbind-0.2.3/src/rpcbind.c        2016-09-04 11:30:23.340410259 +0200
+@@ -340,7 +340,7 @@
        int status;     /* bound checking ? */
        int aicode;
        int addrlen = 0;
@@ -11,26 +10,7 @@ index 63023e1..310c243 100644
        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)
+@@ -456,8 +456,6 @@
                hints.ai_family = si.si_af;
                hints.ai_socktype = si.si_socktype;
                hints.ai_protocol = si.si_proto;
@@ -39,7 +19,7 @@ index 63023e1..310c243 100644
                /*
                 * 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)
+@@ -475,21 +473,15 @@
                        } else
                                return 1;
                }
@@ -67,10 +47,10 @@ index 63023e1..310c243 100644
 +              --nhostsbak;
 +              if ((strcmp(nconf->nc_netid, "local") != 0) &&
 +                  (strcmp(nconf->nc_netid, "unix") != 0)) {
+                       hints.ai_flags &= ~AI_NUMERICHOST;
                        switch (hints.ai_family) {
-                       case AF_INET:
-                               if (inet_pton(AF_INET, hosts[nhostsbak],
-@@ -395,7 +375,7 @@ init_transport(struct netconfig *nconf)
+@@ -518,7 +510,7 @@
                                            host_addr) == 1)
                                                continue;
                                }
@@ -79,7 +59,7 @@ index 63023e1..310c243 100644
                        default:
                                break;
                        }
-@@ -418,97 +398,37 @@ init_transport(struct netconfig *nconf)
+@@ -541,103 +533,37 @@
                        }
                        addrlen = res->ai_addrlen;
                        sa = (struct sockaddr *)res->ai_addr;
@@ -94,8 +74,7 @@ index 63023e1..310c243 100644
 -                      } else
 -                              checkbind++;
 -                      (void) umask(oldmask);
-+              }
+-
 -                      /* Copy the address */
 -                      taddr.addr.maxlen = taddr.addr.len = addrlen;
 -                      taddr.addr.buf = malloc(addrlen);
@@ -103,23 +82,8 @@ index 63023e1..310c243 100644
 -                              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);
+-                              if (res != NULL)
+-                                      freeaddrinfo(res);
 -                              return 1;
 -                      }
 -                      memcpy(taddr.addr.buf, sa, addrlen);
@@ -144,7 +108,7 @@ index 63023e1..310c243 100644
 -                              }
 -                              nb.len = nb.maxlen = sa_size;
 -                              uaddr = taddr2uaddr(nconf, &nb);
--                              (void) fprintf(stderr,
+-                              (void) xlog(LOG_DEBUG,
 -                                  "rpcbind : my address is %s\n", uaddr);
 -                              (void) free(uaddr);
 -                      }
@@ -156,10 +120,20 @@ index 63023e1..310c243 100644
 -                                        nconf->nc_netid);
 -                              goto error;
 -                      }
--              }
+               }
 -              if (!checkbind)
 -                      return 1;
 -      } else {        /* NC_TPI_COTS */
++
++              /*
++               * 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);
+-              }
+-
 -              if ((strcmp(nconf->nc_netid, "local") != 0) &&
 -                  (strcmp(nconf->nc_netid, "unix") != 0)) {
 -                      if ((aicode = getaddrinfo(NULL, servname, &hints, &res))!= 0) {
@@ -170,12 +144,12 @@ index 63023e1..310c243 100644
 -                                  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);
++                      continue;
+               }
+               oldmask = umask(S_IXUSR|S_IXGRP|S_IXOTH);
 -              __rpc_fd2sockinfo(fd, &si);
 -              if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on,
 -                              sizeof(on)) != 0) {
@@ -184,6 +158,16 @@ index 63023e1..310c243 100644
 -                      if (res != NULL)
 -                              freeaddrinfo(res);
 -                      return 1;
++              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);
++                              continue;
++                      }
                }
                if (bind(fd, sa, addrlen) < 0) {
 -                      syslog(LOG_ERR, "cannot bind %s: %m", nconf->nc_netid);
@@ -200,7 +184,7 @@ index 63023e1..310c243 100644
                (void) umask(oldmask);
  
                /* Copy the address */
-@@ -527,7 +447,7 @@ init_transport(struct netconfig *nconf)
+@@ -656,7 +582,7 @@
                        /* for debugging print out our universal address */
                        char *uaddr;
                        struct netbuf nb;
@@ -209,7 +193,7 @@ index 63023e1..310c243 100644
  
                        nb.buf = sa;
                        switch( sa->sa_family){
-@@ -546,7 +466,8 @@ init_transport(struct netconfig *nconf)
+@@ -675,7 +601,8 @@
                }
  #endif
  
@@ -219,25 +203,12 @@ index 63023e1..310c243 100644
  
                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;
-               }
+@@ -740,6 +667,8 @@
+               /* Also add version 2 stuff to rpcbind list */
+               rbllist_add(PMAPPROG, PMAPVERS, nconf, &taddr.addr);
        }
 +      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.
+       /* We need to support portmap over IPv4. It makes sense to
+        * support it over AF_LOCAL as well, because that allows