From: Li Wang <li.w...@windriver.com>

Add option "-p" to specify fixed port number

Signed-off-by: Li Wang <li.w...@windriver.com>
Signed-off-by: Hongxu Jia <hongxu....@windriver.com>
Signed-off-by: Yi Zhao <yi.z...@windriver.com>
---
 .../rpcbind_add_option_to_fix_port_number.patch    | 130 +++++++++++++++++++++
 meta/recipes-extended/rpcbind/rpcbind_0.2.4.bb     |   1 +
 2 files changed, 131 insertions(+)
 create mode 100644 
meta/recipes-extended/rpcbind/rpcbind/rpcbind_add_option_to_fix_port_number.patch

diff --git 
a/meta/recipes-extended/rpcbind/rpcbind/rpcbind_add_option_to_fix_port_number.patch
 
b/meta/recipes-extended/rpcbind/rpcbind/rpcbind_add_option_to_fix_port_number.patch
new file mode 100644
index 0000000..434b6b1
--- /dev/null
+++ 
b/meta/recipes-extended/rpcbind/rpcbind/rpcbind_add_option_to_fix_port_number.patch
@@ -0,0 +1,130 @@
+From 76f8598fd20727908e760cbb497dd6a17eda4af5 Mon Sep 17 00:00:00 2001
+From: Roy Li <rongqing...@windriver.com>
+Date: Wed, 17 Sep 2014 13:22:14 +0800
+Subject: [PATCH] add option to make users able to use fixed port number
+
+Upstream-Status: Submitted 
[https://sourceforge.net/p/rpcbind/discussion/716839/thread/32af721d/]
+
+Signed-off-by: Li Wang <li.w...@windriver.com>
+Signed-off-by: Roy Li <rongqing...@windriver.com>
+Signed-off-by: Yi Zhao <yi.z...@windriver.com>
+---
+ man/rpcbind.8      |  4 +++-
+ src/rpcb_svc_com.c | 17 +++++++++++++++++
+ src/rpcbind.c      |  8 ++++++--
+ 3 files changed, 26 insertions(+), 3 deletions(-)
+
+diff --git a/man/rpcbind.8 b/man/rpcbind.8
+index af6200f..2e6146b 100644
+--- a/man/rpcbind.8
++++ b/man/rpcbind.8
+@@ -11,7 +11,7 @@
+ .Nd universal addresses to RPC program number mapper
+ .Sh SYNOPSIS
+ .Nm
+-.Op Fl adhiLls
++.Op Fl adhpiLls
+ .Sh DESCRIPTION
+ The
+ .Nm
+@@ -107,6 +107,8 @@ will automatically add
+ and if IPv6 is enabled,
+ .Li ::1
+ to the list.
++.It Fl p
++Bind for fixed UDP port number
+ .It Fl i
+ .Dq Insecure
+ mode.
+diff --git a/src/rpcb_svc_com.c b/src/rpcb_svc_com.c
+index 8aef9e5..c2632a4 100644
+--- a/src/rpcb_svc_com.c
++++ b/src/rpcb_svc_com.c
+@@ -48,6 +48,7 @@
+ #include <rpc/rpc.h>
+ #include <rpc/rpcb_prot.h>
+ #include <rpc/svc_dg.h>
++#include <rpc/rpc_com.h>
+ #include <netconfig.h>
+ #include <errno.h>
+ #include <syslog.h>
+@@ -497,6 +498,7 @@ xdr_opaque_parms(XDR *xdrs, struct r_rmtcall_args *cap)
+ 
+ static struct rmtcallfd_list *rmthead;
+ static struct rmtcallfd_list *rmttail;
++extern unsigned short fixed_port;
+ 
+ int
+ create_rmtcall_fd(struct netconfig *nconf)
+@@ -504,6 +506,8 @@ create_rmtcall_fd(struct netconfig *nconf)
+       int fd;
+       struct rmtcallfd_list *rmt;
+       SVCXPRT *xprt;
++      struct __rpc_sockinfo si;
++      struct t_bind taddr;
+ 
+       if ((fd = __rpc_nconf2fd(nconf)) == -1) {
+               if (debugging)
+@@ -512,6 +516,19 @@ create_rmtcall_fd(struct netconfig *nconf)
+                       nconf->nc_device, errno);
+               return (-1);
+       }
++
++      if (fixed_port) {
++              __rpc_fd2sockinfo(fd, &si);
++              memset(&taddr, 0, sizeof(taddr));
++              taddr.addr.maxlen = taddr.addr.len = si.si_alen;
++              taddr.addr.buf = malloc(si.si_alen);
++              if (taddr.addr.buf == NULL) {
++                      return -1;
++              }
++              *(unsigned short *)(&(taddr.addr.buf[0])) = si.si_af;
++              *(unsigned short *)(&(taddr.addr.buf[2])) = htons(fixed_port);
++              xprt = svc_tli_create(fd, nconf, &taddr, RPC_MAXDATASIZE, 
RPC_MAXDATASIZE);
++      } else
+       xprt = svc_tli_create(fd, 0, (struct t_bind *) 0, 0, 0);
+       if (xprt == NULL) {
+               if (debugging)
+diff --git a/src/rpcbind.c b/src/rpcbind.c
+index 137011b..dc3d2d6 100644
+--- a/src/rpcbind.c
++++ b/src/rpcbind.c
+@@ -111,6 +111,7 @@ int runasdaemon = 0;
+ int insecure = 0;
+ int oldstyle_local = 0;
+ int verboselog = 0;
++unsigned short fixed_port = 0;
+ 
+ char **hosts = NULL;
+ int nhosts = 0;
+@@ -869,7 +870,7 @@ parseargs(int argc, char *argv[])
+ {
+       int c;
+       oldstyle_local = 1;
+-      while ((c = getopt(argc, argv, "adh:ilswf")) != -1) {
++      while ((c = getopt(argc, argv, "adh:p:ilswf")) != -1) {
+               switch (c) {
+               case 'a':
+                       doabort = 1;    /* when debugging, do an abort on */
+@@ -887,6 +888,9 @@ parseargs(int argc, char *argv[])
+                       if (hosts[nhosts - 1] == NULL)
+                               errx(1, "Out of memory");
+                       break;
++              case 'p':
++                      fixed_port = atoi(optarg);
++                      break;
+               case 'i':
+                       insecure = 1;
+                       break;
+@@ -905,7 +909,7 @@ parseargs(int argc, char *argv[])
+                       break;
+ #endif
+               default:        /* error */
+-                      fprintf(stderr, "usage: rpcbind [-adhilswf]\n");
++                      fprintf(stderr, "usage: rpcbind [-adhpilswf]\n");
+                       exit (1);
+               }
+       }
+-- 
+1.9.1
+
diff --git a/meta/recipes-extended/rpcbind/rpcbind_0.2.4.bb 
b/meta/recipes-extended/rpcbind/rpcbind_0.2.4.bb
index dcdee6c..3c6774c 100644
--- a/meta/recipes-extended/rpcbind/rpcbind_0.2.4.bb
+++ b/meta/recipes-extended/rpcbind/rpcbind_0.2.4.bb
@@ -18,6 +18,7 @@ SRC_URI = 
"${SOURCEFORGE_MIRROR}/rpcbind/rpcbind-${PV}.tar.bz2 \
            
file://0001-rpcbind-pair-all-svc_getargs-calls-with-svc_freeargs.patch \
            file://pmapproc_dump-Fixed-typo-in-memory-leak-patch.patch \
            file://rpcbproc_callit_com-Stop-freeing-a-static-pointer.patch \
+           file://rpcbind_add_option_to_fix_port_number.patch \
           "
 SRC_URI[md5sum] = "cf10cd41ed8228fc54c316191c1f07fe"
 SRC_URI[sha256sum] = 
"074a9a530dc7c11e0d905aa59bcb0847c009313f02e98d3d798aa9568f414c66"
-- 
2.7.4

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to