From patchwork Tue Feb 12 23:38:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [conntrack-tools,v2] Support compiling against libtirpc X-Patchwork-Submitter: Phil Sutter X-Patchwork-Id: 1040906 X-Patchwork-Delegate: pablo@netfilter.org Message-Id: <20190212233828.6455-1-phil@nwl.cc> To: Pablo Neira Ayuso Cc: netfilter-devel@vger.kernel.org, Jan Engelhardt Date: Wed, 13 Feb 2019 00:38:28 +0100 From: Phil Sutter List-Id: Try compiling against libtirpc on systems where RPC headers are not provided by Glibc. Due to naming conflicts, rpc_call() has had to be renamed. Cc: Jan Engelhardt Signed-off-by: Phil Sutter --- Note that I didn't do real functional testing apart from running conntrack and nfct testsuites. OTOH, in Fedora Rawhide the package is linked against libtirpc as well and seems to work. Changes since v1: - Fix @VAR@ into ${VAR} in Makefile.am as suggested by Jan Engelhardt. --- Make_global.am | 3 ++- Makefile.am | 2 +- configure.ac | 6 ++++++ src/helpers/rpc.c | 7 ++++--- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Make_global.am b/Make_global.am index 80842493a4ad0..554bb3ccc6951 100644 --- a/Make_global.am +++ b/Make_global.am @@ -6,4 +6,5 @@ AM_CFLAGS = -std=gnu99 -W -Wall \ ${LIBNETFILTER_CONNTRACK_CFLAGS} \ ${LIBNETFILTER_CTTIMEOUT_CFLAGS} \ ${LIBNETFILTER_QUEUE_CFLAGS} \ - ${LIBNETFILTER_CTHELPER_CFLAGS} + ${LIBNETFILTER_CTHELPER_CFLAGS} \ + ${LIBTIRPC_CFLAGS} diff --git a/Makefile.am b/Makefile.am index f64d60438d411..d73d7f4c54ff2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -7,7 +7,7 @@ EXTRA_DIST = $(man_MANS) Make_global.am doc m4 tests SUBDIRS = extensions src DIST_SUBDIRS = include src extensions -LIBS = @LIBNETFILTER_CONNTRACK_LIBS@ +LIBS = ${LIBNETFILTER_CONNTRACK_LIBS} ${LIBTIRPC_LIBS} dist-hook: rm -rf `find $(distdir)/doc -name *.orig` diff --git a/configure.ac b/configure.ac index 048d261ac1088..5384d3c80962c 100644 --- a/configure.ac +++ b/configure.ac @@ -73,6 +73,12 @@ AM_CONDITIONAL([HAVE_SYSTEMD], [test "x$enable_systemd" = "xyes"]) AC_CHECK_HEADERS([linux/capability.h],, [AC_MSG_ERROR([Cannot find linux/capabibility.h])]) +# check for rpc_msg.h existence +AC_CHECK_HEADER([rpc/rpc_msg.h], [have_rpc_msg_h=yes], [have_rpc_msg_h=no]) +AS_IF([test "x$have_rpc_msg_h" = "xno"], + [PKG_CHECK_MODULES([LIBTIRPC], [libtirpc], [], + [AC_MSG_ERROR([No provider for rpc/rpc_msg.h found])])]) + # Checks for libraries. # FIXME: Replace `main' with a function in `-lc': dnl AC_CHECK_LIB([c], [main]) diff --git a/src/helpers/rpc.c b/src/helpers/rpc.c index 3a7b337135f04..bd24dd3269c8e 100644 --- a/src/helpers/rpc.c +++ b/src/helpers/rpc.c @@ -26,6 +26,7 @@ #include +#include #include #include #define _GNU_SOURCE @@ -114,8 +115,8 @@ nf_nat_rpc(struct pkt_buff *pkt, int dir, struct nf_expect *exp, #define ROUNDUP(n) ((((n) + 3)/4)*4) static int -rpc_call(const uint32_t *data, uint32_t offset, uint32_t datalen, - struct rpc_info *rpc_info) +rpc_parse_call(const uint32_t *data, uint32_t offset, uint32_t datalen, + struct rpc_info *rpc_info) { uint32_t p, r; @@ -393,7 +394,7 @@ rpc_helper_cb(struct pkt_buff *pkt, uint32_t protoff, } if (rm_dir == CALL) { - if (rpc_call(data, offset, datalen, rpc_info) < 0) + if (rpc_parse_call(data, offset, datalen, rpc_info) < 0) goto out; rpc_info->xid = xid;