libtirpc/libtirpc-0.2.6-rc3.patch
Steve Dickson 7846561ddd Update to latest RC release: libtirpc-0-2-6-rc3
Signed-off-by: Steve Dickson <steved@redhat.com>
2015-04-24 10:59:41 -04:00

2722 lines
72 KiB
Diff

diff --git a/HACKING b/HACKING
new file mode 100644
index 0000000..d562427
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,2 @@
+Patches can be sent to libtirpc-devel@lists.sourceforge.net with a CC
+to linux-nfs@vger.kernel.org
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..2099840
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,370 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
+Inc.
+
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+ Briefly, the shell command `./configure && make && make install'
+should configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package. Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+ The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the `make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior `make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type `make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like `make install' and `make uninstall' work correctly.
+ This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'. This
+is known as a "VPATH" build.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+ By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'. Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the `DESTDIR' variable. For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names. The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of `make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved. Use GNU `make'
+instead.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+ On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf limitation. Until the limitation is lifted, you can use
+this workaround:
+
+ CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+ Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+ Print a summary of the options unique to this package's
+ `configure', and exit. The `short' variant lists options used
+ only in the top level, while the `recursive' variant lists options
+ also present in any nested packages.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+`--no-create'
+`-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
diff --git a/autogen.sh b/autogen.sh
index 3aef4d9..1613b6d 100644
--- a/autogen.sh
+++ b/autogen.sh
@@ -37,6 +37,6 @@ fi
aclocal
libtoolize --force --copy
-#autoheader
+autoheader
automake --add-missing --copy --gnu # -Wall
autoconf # -Wall
diff --git a/bootstrap b/bootstrap
index dde1a77..9f35619 100755
--- a/bootstrap
+++ b/bootstrap
@@ -3,8 +3,10 @@ rm -rf autom4te.cache configure Makefile stamp-h1
rm -rf src/Makefile src/.deps
rm -rf Makefile.in aclocal.m4 config.log config.h
rm -rf depcomp missing install-sh config.status
-aclocal
+mkdir -p m4
+aclocal -I m4
autoheader
+libtoolize --automake --copy
automake --gnu --add-missing -c
autoconf
rm -rf autom4te.cache config.log libtool stamp-h1*
diff --git a/configure.ac b/configure.ac
index bcbe911..80dec85 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT(libtirpc, 0.2.5)
+AC_INIT(libtirpc, 0.2.4)
AM_INIT_AUTOMAKE([silent-rules])
AM_SILENT_RULES([yes])
AC_CONFIG_SRCDIR([src/auth_des.c])
@@ -15,6 +15,12 @@ if test x$enable_gssapi = xyes; then
AC_SUBST([GSSAPI_CFLAGS])
AC_SUBST([GSSAPI_LIBS])
fi
+
+AC_ARG_ENABLE(authdes,
+ [AC_HELP_STRING([--disable-authdes], [Disable DES authentication @<:@default=no@:>@])],
+ [],[enable_authdes=yes])
+AM_CONDITIONAL(AUTHDES, test x$enable_authdes = xyes)
+
AC_ARG_ENABLE(ipv6,
[AC_HELP_STRING([--disable-ipv6], [Disable IPv6 support @<:@default=no@:>@])],
[],[enable_ipv6=yes])
@@ -24,14 +30,16 @@ if test "x$enable_ipv6" != xno; then
fi
AC_PROG_CC
-m4_pattern_allow(AM_CONFIG_HEADERS(config.h))
+AC_CONFIG_HEADERS([config.h])
AC_PROG_LIBTOOL
AC_HEADER_DIRENT
AC_PREFIX_DEFAULT(/usr)
-AC_CHECK_HEADERS([arpa/inet.h fcntl.h libintl.h limits.h locale.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h syslog.h unistd.h])
+AC_CHECK_HEADERS([arpa/inet.h fcntl.h libintl.h limits.h locale.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h syslog.h unistd.h features.h])
AC_CHECK_LIB([pthread], [pthread_create])
AC_CHECK_LIB([nsl], [yp_get_default_domain])
-
+AC_CHECK_FUNCS([getrpcbyname getrpcbynumber])
AC_CONFIG_FILES([Makefile src/Makefile man/Makefile doc/Makefile])
AC_OUTPUT(libtirpc.pc)
+
+
diff --git a/libtirpc.pc.in b/libtirpc.pc.in
index ec4cf75..38034c5 100644
--- a/libtirpc.pc.in
+++ b/libtirpc.pc.in
@@ -8,4 +8,5 @@ Description: Transport Independent RPC Library
Requires:
Version: @PACKAGE_VERSION@
Libs: -L@libdir@ -ltirpc
+Libs.private: -lpthread
Cflags: -I@includedir@/tirpc
diff --git a/src/Makefile.am b/src/Makefile.am
index de57c8f..26ccbdf 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -42,6 +42,7 @@ lib_LTLIBRARIES = libtirpc.la
# misunderstanding of the purpose of library versions."
#
libtirpc_la_LDFLAGS = -lpthread -version-info 1:10:0
+libtirpc_la_CFLAGS =
libtirpc_la_SOURCES = auth_none.c auth_unix.c authunix_prot.c bindresvport.c clnt_bcast.c \
clnt_dg.c clnt_generic.c clnt_perror.c clnt_raw.c clnt_simple.c \
@@ -51,7 +52,7 @@ libtirpc_la_SOURCES = auth_none.c auth_unix.c authunix_prot.c bindresvport.c cln
rpc_callmsg.c rpc_generic.c rpc_soc.c rpcb_clnt.c rpcb_prot.c \
rpcb_st_xdr.c svc.c svc_auth.c svc_dg.c svc_auth_unix.c svc_auth_none.c \
svc_generic.c svc_raw.c svc_run.c svc_simple.c svc_vc.c getpeereid.c \
- auth_time.c auth_des.c authdes_prot.c debug.c
+ auth_time.c debug.c
## XDR
libtirpc_la_SOURCES += xdr.c xdr_rec.c xdr_array.c xdr_float.c xdr_mem.c xdr_reference.c xdr_stdio.c
@@ -60,9 +61,16 @@ libtirpc_la_SOURCES += xdr.c xdr_rec.c xdr_array.c xdr_float.c xdr_mem.c xdr_ref
if GSS
libtirpc_la_SOURCES += auth_gss.c authgss_prot.c svc_auth_gss.c
libtirpc_la_LDFLAGS += $(GSSAPI_LIBS)
- libtirpc_la_CFLAGS = -DHAVE_RPCSEC_GSS $(GSSAPI_CFLAGS)
+ libtirpc_la_CFLAGS += -DHAVE_RPCSEC_GSS $(GSSAPI_CFLAGS)
endif
+## DES authentication
+if AUTHDES
+ libtirpc_la_SOURCES += auth_des.c authdes_prot.c
+ libtirpc_la_CFLAGS += -DHAVE_AUTHDES
+endif
+
+
## libtirpc_a_SOURCES += key_call.c key_prot_xdr.c getpublickey.c
## libtirpc_a_SOURCES += netname.c netnamer.c rpcdname.c \
## libtirpc_a_SOURCES += rtime.c \
diff --git a/src/auth_des.c b/src/auth_des.c
index cff777c..f8749b0 100644
--- a/src/auth_des.c
+++ b/src/auth_des.c
@@ -38,7 +38,6 @@
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
-#include <sys/cdefs.h>
#include <rpc/des_crypt.h>
#include <syslog.h>
#include <rpc/types.h>
@@ -52,7 +51,6 @@
#if defined(LIBC_SCCS) && !defined(lint)
#endif
-#include <sys/cdefs.h>
#include "debug.h"
@@ -66,7 +64,7 @@
extern bool_t xdr_authdes_cred( XDR *, struct authdes_cred *);
extern bool_t xdr_authdes_verf( XDR *, struct authdes_verf *);
-extern int key_encryptsession_pk();
+extern int key_encryptsession_pk( char *, netobj *, des_block *);
extern bool_t __rpc_get_time_offset(struct timeval *, nis_server *, char *,
char **, char **);
diff --git a/src/auth_none.c b/src/auth_none.c
index affc92b..0b0bbd1 100644
--- a/src/auth_none.c
+++ b/src/auth_none.c
@@ -31,7 +31,6 @@
static char *sccsid = "@(#)auth_none.c 1.19 87/08/11 Copyr 1984 Sun Micro";
static char *sccsid = "@(#)auth_none.c 2.1 88/07/29 4.0 RPCSRC";
#endif
-#include <sys/cdefs.h>
__FBSDID("$FreeBSD: src/lib/libc/rpc/auth_none.c,v 1.12 2002/03/22 23:18:35 obrien Exp $");
*/
diff --git a/src/auth_time.c b/src/auth_time.c
index 7cfbb7e..13717ff 100644
--- a/src/auth_time.c
+++ b/src/auth_time.c
@@ -25,15 +25,14 @@
* needed to deal with TCP connections.
*/
-#include <sys/cdefs.h>
#include <stdio.h>
#include <syslog.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <netdb.h>
-#include <sys/signal.h>
-#include <sys/errno.h>
+#include <signal.h>
+#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
diff --git a/src/auth_unix.c b/src/auth_unix.c
index 4b9b13f..3009543 100644
--- a/src/auth_unix.c
+++ b/src/auth_unix.c
@@ -26,7 +26,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* auth_unix.c, Implements UNIX style authentication parameters.
diff --git a/src/authdes_prot.c b/src/authdes_prot.c
index ed061a5..227d08a 100644
--- a/src/authdes_prot.c
+++ b/src/authdes_prot.c
@@ -1,4 +1,3 @@
-#include <sys/cdefs.h>
/*
* Copyright (c) 2009, Sun Microsystems, Inc.
* All rights reserved.
diff --git a/src/authgss_prot.c b/src/authgss_prot.c
index 669eab7..d80ba17 100644
--- a/src/authgss_prot.c
+++ b/src/authgss_prot.c
@@ -37,6 +37,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
+#include <string.h>
#include <rpc/types.h>
#include <rpc/xdr.h>
#include <rpc/auth.h>
diff --git a/src/authunix_prot.c b/src/authunix_prot.c
index bf76a9d..0a04336 100644
--- a/src/authunix_prot.c
+++ b/src/authunix_prot.c
@@ -26,7 +26,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* authunix_prot.c
diff --git a/src/bindresvport.c b/src/bindresvport.c
index d6d9c14..2d8f2bc 100644
--- a/src/bindresvport.c
+++ b/src/bindresvport.c
@@ -26,7 +26,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* Copyright (c) 1987 by Sun Microsystems, Inc.
@@ -37,6 +36,7 @@
#include <sys/types.h>
#include <sys/socket.h>
+#include <netdb.h>
#include <netinet/in.h>
#include <errno.h>
diff --git a/src/clnt_bcast.c b/src/clnt_bcast.c
index 373d8a5..98cf061 100644
--- a/src/clnt_bcast.c
+++ b/src/clnt_bcast.c
@@ -28,7 +28,6 @@
/*
* Copyright (c) 1986-1991 by Sun Microsystems Inc.
*/
-#include <sys/cdefs.h>
/*
* clnt_bcast.c
@@ -46,7 +45,7 @@
#include <net/if.h>
#include <netinet/in.h>
#include <ifaddrs.h>
-#include <sys/poll.h>
+#include <poll.h>
#include <rpc/rpc.h>
#ifdef PORTMAP
#include <rpc/pmap_prot.h>
@@ -142,7 +141,8 @@ __rpc_getbroadifs(int af, int proto, int socktype, broadlist_t *list)
return 0;
for (ifap = ifp; ifap != NULL; ifap = ifap->ifa_next) {
- if (ifap->ifa_addr->sa_family != af ||
+ if (ifap->ifa_addr == NULL || /* happens for eg tuntap devices */
+ ifap->ifa_addr->sa_family != af ||
!(ifap->ifa_flags & IFF_UP))
continue;
bip = (struct broadif *)malloc(sizeof *bip);
@@ -222,6 +222,39 @@ __rpc_broadenable(int af, int s, struct broadif *bip)
return 0;
}
+/*
+ * Some rpcbind implementations use an IPv6 socket to serve both
+ * IPv4 and IPv6 messages, but neglect to check for the caller's
+ * address family when sending broadcast replies. These rpcbind
+ * implementations return an IPv6 address in reply to an IPv4
+ * broadcast. We can either ignore them, or try to patch them up.
+ */
+static struct netbuf *
+__ipv6v4_fixup(struct sockaddr_storage *ss, const char *uaddr)
+{
+ struct sockaddr_in sin;
+ struct netbuf *np;
+
+ /* ss is the remote rpcbind server's address */
+ if (ss->ss_family != AF_INET)
+ return NULL;
+ memcpy(&sin, ss, sizeof(sin));
+
+ np = __rpc_uaddr2taddr_af(AF_INET6, uaddr);
+ if (np == NULL)
+ return NULL;
+
+ /* Overwrite the port with that of the service we
+ * wanted to talk to. */
+ sin.sin_port = ((struct sockaddr_in6 *) np)->sin6_port;
+
+ /* We know netbuf holds a sockaddr_in6, so it can easily
+ * hold a sockaddr_in as well. */
+ memcpy(np->buf, &sin, sizeof(sin));
+ np->len = sizeof(sin);
+
+ return np;
+}
enum clnt_stat
rpc_broadcast_exp(prog, vers, proc, xargs, argsp, xresults, resultsp,
@@ -588,9 +621,18 @@ rpc_broadcast_exp(prog, vers, proc, xargs, argsp, xresults, resultsp,
LIBTIRPC_DEBUG(3, ("rpc_broadcast_exp: uaddr %s\n", uaddrp));
np = uaddr2taddr(
fdlist[i].nconf, uaddrp);
- done = (*eachresult)(resultsp,
- np, fdlist[i].nconf);
- free(np);
+ /* Some misguided rpcbind implemenations
+ * seem to return an IPv6 uaddr in IPv4
+ * responses. */
+ if (np == NULL)
+ np = __ipv6v4_fixup(
+ &fdlist[i].raddr,
+ uaddrp);
+ if (np != NULL) {
+ done = (*eachresult)(resultsp,
+ np, fdlist[i].nconf);
+ free(np);
+ }
#ifdef PORTMAP
}
#endif /* PORTMAP */
diff --git a/src/clnt_dg.c b/src/clnt_dg.c
index dcc621c..248138b 100644
--- a/src/clnt_dg.c
+++ b/src/clnt_dg.c
@@ -37,7 +37,7 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <stdint.h>
-#include <sys/poll.h>
+#include <poll.h>
#include <sys/time.h>
diff --git a/src/clnt_generic.c b/src/clnt_generic.c
index b9b07bc..3f3dabf 100644
--- a/src/clnt_generic.c
+++ b/src/clnt_generic.c
@@ -29,7 +29,7 @@
#include <pthread.h>
#include <reentrant.h>
#include <sys/types.h>
-#include <sys/fcntl.h>
+#include <fcntl.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
diff --git a/src/clnt_perror.c b/src/clnt_perror.c
index bcd8af8..fb7fb80 100644
--- a/src/clnt_perror.c
+++ b/src/clnt_perror.c
@@ -27,9 +27,6 @@
*/
/*
-#include <sys/cdefs.h>
-*/
-/*
* clnt_perror.c
*
* Copyright (C) 1984, Sun Microsystems, Inc.
diff --git a/src/clnt_simple.c b/src/clnt_simple.c
index 7ee9542..1700060 100644
--- a/src/clnt_simple.c
+++ b/src/clnt_simple.c
@@ -29,7 +29,6 @@
* Copyright (c) 1986-1991 by Sun Microsystems Inc.
*/
-#include <sys/cdefs.h>
/*
* clnt_simple.c
diff --git a/src/clnt_vc.c b/src/clnt_vc.c
index 61264d4..a72f9f7 100644
--- a/src/clnt_vc.c
+++ b/src/clnt_vc.c
@@ -48,7 +48,7 @@
#include <reentrant.h>
#include <sys/types.h>
-#include <sys/poll.h>
+#include <poll.h>
#include <sys/syslog.h>
#include <sys/un.h>
#include <sys/uio.h>
diff --git a/src/crypt_client.c b/src/crypt_client.c
index 670b253..f393926 100644
--- a/src/crypt_client.c
+++ b/src/crypt_client.c
@@ -30,7 +30,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
#include <err.h>
#include <sys/types.h>
diff --git a/src/debug.h b/src/debug.h
index afc8d57..c971ac3 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -21,6 +21,8 @@
#ifndef _DEBUG_H
#define _DEBUG_H
+
+#include <stdarg.h>
#include <syslog.h>
extern int libtirpc_debug_level;
diff --git a/src/des_crypt.c b/src/des_crypt.c
index 37a1022..980a6cb 100644
--- a/src/des_crypt.c
+++ b/src/des_crypt.c
@@ -39,7 +39,6 @@
static char sccsid[] = "@(#)des_crypt.c 2.2 88/08/10 4.0 RPCSRC; from 1.13 88/02/08 SMI";
#endif
#endif
-#include <sys/cdefs.h>
static int common_crypt( char *, char *, unsigned, unsigned, struct desparams * );
int (*__des_crypt_LOCAL)() = 0;
diff --git a/src/getnetconfig.c b/src/getnetconfig.c
index 635c03a..92e7c43 100644
--- a/src/getnetconfig.c
+++ b/src/getnetconfig.c
@@ -32,7 +32,6 @@
#include <pthread.h>
#include <reentrant.h>
-#include <sys/cdefs.h>
#include <stdio.h>
#include <errno.h>
#include <netconfig.h>
diff --git a/src/getnetpath.c b/src/getnetpath.c
index cd80dca..7c19932 100644
--- a/src/getnetpath.c
+++ b/src/getnetpath.c
@@ -25,13 +25,11 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* Copyright (c) 1989 by Sun Microsystems, Inc.
*/
-#include <sys/cdefs.h>
#include <stdio.h>
#include <errno.h>
#include <netconfig.h>
diff --git a/src/getpeereid.c b/src/getpeereid.c
index 57ee197..dd85270 100644
--- a/src/getpeereid.c
+++ b/src/getpeereid.c
@@ -24,7 +24,6 @@
* SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/socket.h>
diff --git a/src/getpublickey.c b/src/getpublickey.c
index 85935d8..764a5f9 100644
--- a/src/getpublickey.c
+++ b/src/getpublickey.c
@@ -25,9 +25,6 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
-/*
-#include <sys/cdefs.h>
-*/
/*
* publickey.c
diff --git a/src/getrpcent.c b/src/getrpcent.c
index 1b54b6d..6da006a 100644
--- a/src/getrpcent.c
+++ b/src/getrpcent.c
@@ -50,6 +50,10 @@
#include <libc_private.h>
#endif
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
/*
* Internet version.
*/
@@ -89,7 +93,7 @@ _rpcdata()
return (d);
}
-#ifdef GQ
+#if !HAVE_GETRPCBYNYMBER
struct rpcent *
getrpcbynumber(number)
int number;
@@ -135,7 +139,9 @@ no_yp:
endrpcent();
return (p);
}
+#endif /* !HAVE_GETRPCBYNUMBER */
+#if !HAVE_GETRPCBYNAME
struct rpcent *
getrpcbyname(name)
const char *name;
@@ -158,7 +164,7 @@ done:
endrpcent();
return (rpc);
}
-#endif /* GQ */
+#endif /* !HAVE_GETRPCBYNAME */
void
setrpcent(f)
diff --git a/src/key_call.c b/src/key_call.c
index 8b9f388..589fd6f 100644
--- a/src/key_call.c
+++ b/src/key_call.c
@@ -30,7 +30,6 @@
*/
-#include <sys/cdefs.h>
/*
* key_call.c, Interface to keyserver
@@ -57,7 +56,7 @@
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
-#include <sys/fcntl.h>
+#include <fcntl.h>
#include "dump.h"
diff --git a/src/key_prot_xdr.c b/src/key_prot_xdr.c
index df2842f..772f582 100644
--- a/src/key_prot_xdr.c
+++ b/src/key_prot_xdr.c
@@ -33,7 +33,6 @@
*/
/* Copyright (c) 1990, 1991 Sun Microsystems, Inc. */
-#include <sys/cdefs.h>
/*
* Compiled from key_prot.x using rpcgen.
diff --git a/src/mt_misc.c b/src/mt_misc.c
index 093086e..a50f385 100644
--- a/src/mt_misc.c
+++ b/src/mt_misc.c
@@ -1,5 +1,4 @@
-#include <sys/cdefs.h>
#include <pthread.h>
#include <reentrant.h>
#include <rpc/rpc.h>
diff --git a/src/pmap_clnt.c b/src/pmap_clnt.c
index 1d5d153..4b5fd85 100644
--- a/src/pmap_clnt.c
+++ b/src/pmap_clnt.c
@@ -26,7 +26,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* pmap_clnt.c
diff --git a/src/pmap_getmaps.c b/src/pmap_getmaps.c
index 54338f7..853f724 100644
--- a/src/pmap_getmaps.c
+++ b/src/pmap_getmaps.c
@@ -26,7 +26,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* pmap_getmap.c
diff --git a/src/pmap_rmt.c b/src/pmap_rmt.c
index b81d771..1c76114 100644
--- a/src/pmap_rmt.c
+++ b/src/pmap_rmt.c
@@ -36,7 +36,7 @@
#include <sys/types.h>
#include <sys/ioctl.h>
-#include <sys/poll.h>
+#include <poll.h>
#include <sys/socket.h>
#include <net/if.h>
diff --git a/src/rpc_com.h b/src/rpc_com.h
index 38c2cfe..52a8c48 100644
--- a/src/rpc_com.h
+++ b/src/rpc_com.h
@@ -40,7 +40,6 @@
#ifndef _TIRPC_RPCCOM_H
#define _TIRPC_RPCCOM_H
-#include <sys/cdefs.h>
/* #pragma ident "@(#)rpc_com.h 1.11 93/07/05 SMI" */
@@ -54,7 +53,9 @@
#define __RPC_GETXID(now) ((u_int32_t)getpid() ^ (u_int32_t)(now)->tv_sec ^ \
(u_int32_t)(now)->tv_usec)
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern u_int __rpc_get_a_size(int);
extern int __rpc_dtbsize(void);
extern struct netconfig * __rpcgettp(int);
@@ -90,6 +91,8 @@ void __xprt_set_raddr(SVCXPRT *, const struct sockaddr_storage *);
SVCXPRT **__svc_xports;
int __svc_maxrec;
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* _TIRPC_RPCCOM_H */
diff --git a/src/rpc_generic.c b/src/rpc_generic.c
index a43906c..6148830 100644
--- a/src/rpc_generic.c
+++ b/src/rpc_generic.c
@@ -29,7 +29,6 @@
* Copyright (c) 1986-1991 by Sun Microsystems Inc.
*/
-#include <sys/cdefs.h>
/*
* rpc_generic.c, Miscl routines for RPC.
@@ -608,6 +607,7 @@ __rpc_taddr2uaddr_af(int af, const struct netbuf *nbuf)
struct sockaddr_in6 *sin6;
char namebuf6[INET6_ADDRSTRLEN];
#endif
+ int path_len;
u_int16_t port;
if (nbuf->len <= 0)
@@ -638,13 +638,12 @@ __rpc_taddr2uaddr_af(int af, const struct netbuf *nbuf)
#endif
case AF_LOCAL:
sun = nbuf->buf;
- /* if (asprintf(&ret, "%.*s", (int)(sun->sun_len -
- offsetof(struct sockaddr_un, sun_path)),
- sun->sun_path) < 0)*/
- if (asprintf(&ret, "%.*s", (int)(sizeof(*sun) -
- offsetof(struct sockaddr_un, sun_path)),
- sun->sun_path) < 0)
+ path_len = nbuf->len - offsetof(struct sockaddr_un, sun_path);
+ if (path_len < 0)
+ return NULL;
+
+ if (asprintf(&ret, "%.*s", path_len, sun->sun_path) < 0)
return (NULL);
break;
default:
diff --git a/src/rpc_soc.c b/src/rpc_soc.c
index 338edbb..6574323 100644
--- a/src/rpc_soc.c
+++ b/src/rpc_soc.c
@@ -520,6 +520,7 @@ clnt_broadcast(prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult)
(resultproc_t) rpc_wrap_bcast, "udp");
}
+#if HAVE_AUTHDES
/*
* Create the client des authentication object. Obsoleted by
* authdes_seccreate().
@@ -551,6 +552,7 @@ fallback:
dummy = authdes_seccreate(servername, window, NULL, ckey);
return (dummy);
}
+#endif
/*
* Create a client handle for a unix connection. Obsoleted by clnt_vc_create()
@@ -564,16 +566,12 @@ clntunix_create(raddr, prog, vers, sockp, sendsz, recvsz)
u_int sendsz;
u_int recvsz;
{
- struct netbuf *svcaddr;
- CLIENT *cl;
+ struct netbuf svcaddr = {0, 0, NULL};
+ CLIENT *cl = NULL;
int len;
- cl = NULL;
- svcaddr = NULL;
- if (((svcaddr = malloc(sizeof(struct netbuf))) == NULL ) ||
- ((svcaddr->buf = malloc(sizeof(struct sockaddr_un))) == NULL)) {
- if (svcaddr != NULL)
- free(svcaddr);
+ memset(&svcaddr, 0, sizeof(svcaddr));
+ if (__rpc_set_netbuf(&svcaddr, raddr, sizeof(*raddr)) == NULL) {
rpc_createerr.cf_stat = RPC_SYSTEMERROR;
rpc_createerr.cf_error.re_errno = errno;
return(cl);
@@ -590,14 +588,10 @@ clntunix_create(raddr, prog, vers, sockp, sendsz, recvsz)
goto done;
}
}
- svcaddr->buf = raddr;
- svcaddr->len = sizeof(raddr);
- svcaddr->maxlen = sizeof (struct sockaddr_un);
- cl = clnt_vc_create(*sockp, svcaddr, prog,
+ cl = clnt_vc_create(*sockp, &svcaddr, prog,
vers, sendsz, recvsz);
done:
- free(svcaddr->buf);
- free(svcaddr);
+ free(svcaddr.buf);
return(cl);
}
diff --git a/src/rpcb_clnt.c b/src/rpcb_clnt.c
index a796593..78b1534 100644
--- a/src/rpcb_clnt.c
+++ b/src/rpcb_clnt.c
@@ -282,6 +282,18 @@ getclnthandle(host, nconf, targaddr)
struct address_cache *ad_cache;
char *tmpaddr;
+ if (nconf == NULL) {
+ rpc_createerr.cf_stat = RPC_UNKNOWNPROTO;
+ return NULL;
+ }
+
+ if (nconf->nc_protofmly != NULL &&
+ strcmp(nconf->nc_protofmly, NC_LOOPBACK) != 0 &&
+ host == NULL) {
+ rpc_createerr.cf_stat = RPC_UNKNOWNHOST;
+ return NULL;
+ }
+
/* VARIABLES PROTECTED BY rpcbaddr_cache_lock: ad_cache */
/* Get the address of the rpcbind. Check cache first */
@@ -291,6 +303,7 @@ getclnthandle(host, nconf, targaddr)
addr_to_delete.len = 0;
rwlock_rdlock(&rpcbaddr_cache_lock);
ad_cache = NULL;
+
if (host != NULL)
ad_cache = check_cache(host, nconf->nc_netid);
if (ad_cache != NULL) {
@@ -298,7 +311,7 @@ getclnthandle(host, nconf, targaddr)
client = clnt_tli_create(RPC_ANYFD, nconf, addr,
(rpcprog_t)RPCBPROG, (rpcvers_t)RPCBVERS4, 0, 0);
if (client != NULL) {
- if (targaddr)
+ if (targaddr && ad_cache->ac_uaddr)
*targaddr = strdup(ad_cache->ac_uaddr);
rwlock_unlock(&rpcbaddr_cache_lock);
return (client);
@@ -345,9 +358,11 @@ getclnthandle(host, nconf, targaddr)
} else {
struct sockaddr_un sun;
- *targaddr = malloc(sizeof(sun.sun_path));
- strncpy(*targaddr, _PATH_RPCBINDSOCK,
- sizeof(sun.sun_path));
+ if (targaddr) {
+ *targaddr = malloc(sizeof(sun.sun_path));
+ strncpy(*targaddr, _PATH_RPCBINDSOCK,
+ sizeof(sun.sun_path));
+ }
return (client);
}
} else {
@@ -387,7 +402,8 @@ getclnthandle(host, nconf, targaddr)
if (client) {
tmpaddr = targaddr ? taddr2uaddr(nconf, &taddr) : NULL;
- add_cache(host, nconf->nc_netid, &taddr, tmpaddr);
+ if (host)
+ add_cache(host, nconf->nc_netid, &taddr, tmpaddr);
if (targaddr)
*targaddr = tmpaddr;
break;
@@ -401,6 +417,44 @@ out_err:
return (client);
}
+/*
+ * Create a PMAP client handle.
+ */
+static CLIENT *
+getpmaphandle(nconf, hostname, tgtaddr)
+ const struct netconfig *nconf;
+ const char *hostname;
+ char **tgtaddr;
+{
+ CLIENT *client = NULL;
+ rpcvers_t pmapvers = 2;
+
+ /*
+ * Try UDP only - there are some portmappers out
+ * there that use UDP only.
+ */
+ if (nconf == NULL || strcmp(nconf->nc_proto, NC_TCP) == 0) {
+ struct netconfig *newnconf;
+
+ if ((newnconf = getnetconfigent("udp")) == NULL) {
+ rpc_createerr.cf_stat = RPC_UNKNOWNPROTO;
+ return NULL;
+ }
+ client = getclnthandle(hostname, newnconf, tgtaddr);
+ freenetconfigent(newnconf);
+ } else if (strcmp(nconf->nc_proto, NC_UDP) == 0) {
+ if (strcmp(nconf->nc_protofmly, NC_INET) != 0)
+ return NULL;
+ client = getclnthandle(hostname, nconf, tgtaddr);
+ }
+
+ /* Set version */
+ if (client != NULL)
+ CLNT_CONTROL(client, CLSET_VERS, (char *)&pmapvers);
+
+ return client;
+}
+
/* XXX */
#define IN4_LOCALHOST_STRING "127.0.0.1"
#define IN6_LOCALHOST_STRING "::1"
@@ -733,34 +787,20 @@ __rpcb_findaddr_timed(program, version, nconf, host, clpp, tp)
if (strcmp(nconf->nc_protofmly, NC_INET) == 0) {
u_short port = 0;
struct netbuf remote;
- rpcvers_t pmapvers = 2;
struct pmap pmapparms;
- /*
- * Try UDP only - there are some portmappers out
- * there that use UDP only.
- */
- if (strcmp(nconf->nc_proto, NC_TCP) == 0) {
- struct netconfig *newnconf;
-
- if ((newnconf = getnetconfigent("udp")) == NULL) {
- rpc_createerr.cf_stat = RPC_UNKNOWNPROTO;
- return (NULL);
- }
- client = getclnthandle(host, newnconf, &parms.r_addr);
- freenetconfigent(newnconf);
- } else if (strcmp(nconf->nc_proto, NC_UDP) == 0)
- client = getclnthandle(host, nconf, &parms.r_addr);
- else
+ if (strcmp(nconf->nc_proto, NC_UDP) != 0
+ && strcmp(nconf->nc_proto, NC_TCP) != 0)
goto try_rpcbind;
+
+ client = getpmaphandle(nconf, host, &parms.r_addr);
if (client == NULL)
return (NULL);
/*
- * Set version and retry timeout.
+ * Set retry timeout.
*/
CLNT_CONTROL(client, CLSET_RETRY_TIMEOUT, (char *)&rpcbrmttime);
- CLNT_CONTROL(client, CLSET_VERS, (char *)&pmapvers);
pmapparms.pm_prog = program;
pmapparms.pm_vers = version;
diff --git a/src/rpcb_st_xdr.c b/src/rpcb_st_xdr.c
index c5d3575..08db745 100644
--- a/src/rpcb_st_xdr.c
+++ b/src/rpcb_st_xdr.c
@@ -35,7 +35,6 @@
* routines used with the rpcbind stats facility.
*/
-#include <sys/cdefs.h>
#include <rpc/rpc.h>
diff --git a/src/rpcdname.c b/src/rpcdname.c
index 094cea3..3e6a988 100644
--- a/src/rpcdname.c
+++ b/src/rpcdname.c
@@ -25,7 +25,6 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* rpcdname.c
diff --git a/src/svc.c b/src/svc.c
index 8afd15d..32c84f1 100644
--- a/src/svc.c
+++ b/src/svc.c
@@ -40,7 +40,7 @@
#include <reentrant.h>
#include <sys/types.h>
-#include <sys/poll.h>
+#include <poll.h>
#include <assert.h>
#include <errno.h>
#include <stdlib.h>
diff --git a/src/svc_dg.c b/src/svc_dg.c
index f8255cc..1fd6f92 100644
--- a/src/svc_dg.c
+++ b/src/svc_dg.c
@@ -31,7 +31,6 @@
* Copyright (c) 1986-1991 by Sun Microsystems Inc.
*/
-#include <sys/cdefs.h>
/*
* svc_dg.c, Server side for connectionless RPC.
diff --git a/src/svc_simple.c b/src/svc_simple.c
index b6c371e..cb58002 100644
--- a/src/svc_simple.c
+++ b/src/svc_simple.c
@@ -29,7 +29,6 @@
* Copyright (c) 1986-1991 by Sun Microsystems Inc.
*/
-#include <sys/cdefs.h>
/*
* svc_simple.c
diff --git a/src/svc_vc.c b/src/svc_vc.c
index 4c70de8..9824631 100644
--- a/src/svc_vc.c
+++ b/src/svc_vc.c
@@ -27,7 +27,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* svc_vc.c, Server side for Connection Oriented based RPC.
@@ -41,7 +40,7 @@
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/param.h>
-#include <sys/poll.h>
+#include <poll.h>
#include <sys/un.h>
#include <sys/time.h>
#include <sys/uio.h>
@@ -559,20 +558,19 @@ write_vc(xprtp, buf, len)
cd->strm_stat = XPRT_DIED;
return (-1);
}
- if (cd->nonblock && i != cnt) {
- /*
- * For non-blocking connections, do not
- * take more than 2 seconds writing the
- * data out.
- *
- * XXX 2 is an arbitrary amount.
- */
- gettimeofday(&tv1, NULL);
- if (tv1.tv_sec - tv0.tv_sec >= 2) {
- cd->strm_stat = XPRT_DIED;
- return (-1);
- }
+ /*
+ * For non-blocking connections, do not
+ * take more than 2 seconds writing the
+ * data out.
+ *
+ * XXX 2 is an arbitrary amount.
+ */
+ gettimeofday(&tv1, NULL);
+ if (tv1.tv_sec - tv0.tv_sec >= 2) {
+ cd->strm_stat = XPRT_DIED;
+ return (-1);
}
+ i = 0; /* Don't change buf and cnt */
}
}
diff --git a/src/xdr.c b/src/xdr.c
index 1142a88..f3fb9ad 100644
--- a/src/xdr.c
+++ b/src/xdr.c
@@ -26,7 +26,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* xdr.c, Generic XDR routines implementation.
diff --git a/src/xdr_array.c b/src/xdr_array.c
index 216173d..7fc8fb8 100644
--- a/src/xdr_array.c
+++ b/src/xdr_array.c
@@ -27,7 +27,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* xdr_array.c, Generic XDR routines impelmentation.
diff --git a/src/xdr_float.c b/src/xdr_float.c
index 90daf3f..26bc865 100644
--- a/src/xdr_float.c
+++ b/src/xdr_float.c
@@ -27,7 +27,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* xdr_float.c, Generic XDR routines implementation.
diff --git a/src/xdr_mem.c b/src/xdr_mem.c
index bd86f00..ecdc932 100644
--- a/src/xdr_mem.c
+++ b/src/xdr_mem.c
@@ -26,7 +26,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* xdr_mem.h, XDR implementation using memory buffers.
diff --git a/src/xdr_rec.c b/src/xdr_rec.c
index 2aca623..7d535cf 100644
--- a/src/xdr_rec.c
+++ b/src/xdr_rec.c
@@ -27,8 +27,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-#include <sys/cdefs.h>
/*
* xdr_rec.c, Implements TCP/IP based XDR streams with a "record marking"
diff --git a/src/xdr_reference.c b/src/xdr_reference.c
index affe19e..13f6410 100644
--- a/src/xdr_reference.c
+++ b/src/xdr_reference.c
@@ -26,8 +26,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
-#include <sys/cdefs.h>
/*
* xdr_reference.c, Generic XDR routines impelmentation.
diff --git a/src/xdr_sizeof.c b/src/xdr_sizeof.c
index a805e31..cc5414b 100644
--- a/src/xdr_sizeof.c
+++ b/src/xdr_sizeof.c
@@ -34,7 +34,6 @@
* when serialized using XDR.
*/
-#include <sys/cdefs.h>
#include <rpc/types.h>
#include <rpc/xdr.h>
diff --git a/src/xdr_stdio.c b/src/xdr_stdio.c
index 45b1150..4410262 100644
--- a/src/xdr_stdio.c
+++ b/src/xdr_stdio.c
@@ -26,7 +26,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/cdefs.h>
/*
* xdr_stdio.c, XDR implementation on standard i/o file.
diff --git a/tirpc/netconfig.h b/tirpc/netconfig.h
index 7d6c2bc..3f1a685 100644
--- a/tirpc/netconfig.h
+++ b/tirpc/netconfig.h
@@ -1,7 +1,9 @@
#ifndef _NETCONFIG_H_
#define _NETCONFIG_H_
+#ifdef HAVE_FEATURES_H
#include <features.h>
+#endif
#define NETCONFIG "/etc/netconfig"
#define NETPATH "NETPATH"
@@ -74,7 +76,9 @@ typedef struct {
#define NC_UDP "udp"
#define NC_ICMP "icmp"
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern void *setnetconfig (void);
extern struct netconfig *getnetconfig (void *);
@@ -89,6 +93,8 @@ extern int endnetpath (void *);
extern void nc_perror (const char *);
extern char *nc_sperror (void);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* _NETCONFIG_H_ */
diff --git a/tirpc/rpc/auth.h b/tirpc/rpc/auth.h
index 7c8f813..434d35c 100644
--- a/tirpc/rpc/auth.h
+++ b/tirpc/rpc/auth.h
@@ -48,7 +48,6 @@
#include <rpc/xdr.h>
#include <rpc/clnt_stat.h>
-#include <sys/cdefs.h>
#include <sys/socket.h>
#include <sys/types.h>
@@ -164,9 +163,13 @@ union des_block {
char c[8];
};
typedef union des_block des_block;
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern bool_t xdr_des_block(XDR *, des_block *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Authentication info. Opaque to client.
@@ -277,9 +280,13 @@ auth_put(AUTH *auth)
xfunc, xwhere))
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern struct opaque_auth _null_auth;
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Any style authentication. These routines can be used by any
@@ -300,11 +307,15 @@ int authany_wrap(void), authany_unwrap(void);
* int len;
* int *aup_gids;
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern AUTH *authunix_create(char *, uid_t, uid_t, int, uid_t *);
extern AUTH *authunix_create_default(void); /* takes no parameters */
extern AUTH *authnone_create(void); /* takes no parameters */
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* DES style authentication
* AUTH *authsecdes_create(servername, window, timehost, ckey)
@@ -313,15 +324,23 @@ __END_DECLS
* const char *timehost; - optional hostname to sync with
* des_block *ckey; - optional conversation key to use
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern AUTH *authdes_create (char *, u_int, struct sockaddr *, des_block *);
extern AUTH *authdes_seccreate (const char *, const u_int, const char *,
const des_block *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern bool_t xdr_opaque_auth (XDR *, struct opaque_auth *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#define authsys_create(c,i1,i2,i3,ip) authunix_create((c),(i1),(i2),(i3),(ip))
#define authsys_create_default() authunix_create_default()
@@ -329,36 +348,48 @@ __END_DECLS
/*
* Netname manipulation routines.
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern int getnetname(char *);
extern int host2netname(char *, const char *, const char *);
extern int user2netname(char *, const uid_t, const char *);
extern int netname2user(char *, uid_t *, gid_t *, int *, gid_t *);
extern int netname2host(char *, char *, const int);
extern void passwd2des ( char *, char * );
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
*
* These routines interface to the keyserv daemon
*
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern int key_decryptsession(const char *, des_block *);
extern int key_encryptsession(const char *, des_block *);
extern int key_gendes(des_block *);
extern int key_setsecret(const char *);
extern int key_secretkey_is_set(void);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Publickey routines.
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern int getpublickey (const char *, char *);
extern int getpublicandprivatekey (char *, char *);
extern int getsecretkey (char *, char *, char *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#ifdef KERBEROS
/*
@@ -371,10 +402,14 @@ __END_DECLS
* const char *timehost; - optional hostname to sync with
* int *status; - kerberos status returned
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern AUTH *authkerb_seccreate(const char *, const char *, const char *,
const u_int, const char *, int *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Map a kerberos credential into a unix cred.
@@ -387,20 +422,28 @@ __END_DECLS
* int *groups;
*
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern int authkerb_getucred(/* struct svc_req *, uid_t *, gid_t *,
short *, int * */);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* KERBEROS */
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
struct svc_req;
struct rpc_msg;
enum auth_stat _svcauth_none (struct svc_req *, struct rpc_msg *);
enum auth_stat _svcauth_short (struct svc_req *, struct rpc_msg *);
enum auth_stat _svcauth_unix (struct svc_req *, struct rpc_msg *);
enum auth_stat _svcauth_gss (struct svc_req *, struct rpc_msg *, bool_t *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#define AUTH_NONE 0 /* no authentication */
#define AUTH_NULL 0 /* backward compatibility */
diff --git a/tirpc/rpc/auth_des.h b/tirpc/rpc/auth_des.h
index 39b5332..77e169d 100644
--- a/tirpc/rpc/auth_des.h
+++ b/tirpc/rpc/auth_des.h
@@ -114,17 +114,25 @@ struct authdes_verf {
* Map a des credential into a unix cred.
*
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern int authdes_getucred( struct authdes_cred *, uid_t *, gid_t *, int *, gid_t * );
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern bool_t xdr_authdes_cred(XDR *, struct authdes_cred *);
extern bool_t xdr_authdes_verf(XDR *, struct authdes_verf *);
extern int rtime(dev_t, struct netbuf *, int, struct timeval *,
struct timeval *);
extern void kgetnetname(char *);
extern enum auth_stat _svcauth_des(struct svc_req *, struct rpc_msg *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* ndef _TI_AUTH_DES_ */
diff --git a/tirpc/rpc/auth_gss.h b/tirpc/rpc/auth_gss.h
index d6f2bbd..a17b34b 100644
--- a/tirpc/rpc/auth_gss.h
+++ b/tirpc/rpc/auth_gss.h
@@ -104,28 +104,29 @@ struct rpc_gss_init_res {
#define MAXSEQ 0x80000000
/* Prototypes. */
-__BEGIN_DECLS
-bool_t xdr_rpc_gss_cred __P((XDR *xdrs, struct rpc_gss_cred *p));
-bool_t xdr_rpc_gss_init_args __P((XDR *xdrs, gss_buffer_desc *p));
-bool_t xdr_rpc_gss_init_res __P((XDR *xdrs, struct rpc_gss_init_res *p));
-bool_t xdr_rpc_gss_data __P((XDR *xdrs, xdrproc_t xdr_func,
- caddr_t xdr_ptr, gss_ctx_id_t ctx,
- gss_qop_t qop, rpc_gss_svc_t svc,
- u_int seq));
-
-AUTH *authgss_create __P((CLIENT *, gss_name_t,
- struct rpc_gss_sec *));
-AUTH *authgss_create_default __P((CLIENT *, char *, struct rpc_gss_sec *));
-bool_t authgss_service __P((AUTH *auth, int svc));
-bool_t authgss_get_private_data __P((AUTH *auth,
- struct authgss_private_data *));
-bool_t authgss_free_private_data __P((struct authgss_private_data *));
-
-void gss_log_debug __P((const char *fmt, ...));
-void gss_log_status __P((char *m, OM_uint32 major,
- OM_uint32 minor));
-void gss_log_hexdump __P((const u_char *buf, int len, int offset));
-
-__END_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
+bool_t xdr_rpc_gss_cred (XDR *xdrs, struct rpc_gss_cred *p);
+bool_t xdr_rpc_gss_init_args (XDR *xdrs, gss_buffer_desc *p);
+bool_t xdr_rpc_gss_init_res (XDR *xdrs, struct rpc_gss_init_res *p);
+bool_t xdr_rpc_gss_data (XDR *xdrs, xdrproc_t xdr_func,
+ caddr_t xdr_ptr, gss_ctx_id_t ctx,
+ gss_qop_t qop, rpc_gss_svc_t svc,
+ u_int seq);
+
+AUTH *authgss_create (CLIENT *, gss_name_t, struct rpc_gss_sec *);
+AUTH *authgss_create_default (CLIENT *, char *, struct rpc_gss_sec *);
+bool_t authgss_service (AUTH *auth, int svc);
+bool_t authgss_get_private_data (AUTH *auth, struct authgss_private_data *);
+bool_t authgss_free_private_data (struct authgss_private_data *);
+
+void gss_log_debug (const char *fmt, ...);
+void gss_log_status (char *m, OM_uint32 major, OM_uint32 minor);
+void gss_log_hexdump (const u_char *buf, int len, int offset);
+
+#ifdef __cplusplus
+}
+#endif
#endif /* !_TIRPC_AUTH_GSS_H */
diff --git a/tirpc/rpc/auth_unix.h b/tirpc/rpc/auth_unix.h
index 602889b..b10e71d 100644
--- a/tirpc/rpc/auth_unix.h
+++ b/tirpc/rpc/auth_unix.h
@@ -45,7 +45,6 @@
#ifndef _TIRPC_AUTH_UNIX_H
#define _TIRPC_AUTH_UNIX_H
-#include <sys/cdefs.h>
/* The machine name is part of a credential; it may not exceed 255 bytes */
#define MAX_MACHINE_NAME 255
@@ -67,9 +66,13 @@ struct authunix_parms {
#define authsys_parms authunix_parms
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern bool_t xdr_authunix_parms(XDR *, struct authunix_parms *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* If a response verifier has flavor AUTH_SHORT,
diff --git a/tirpc/rpc/clnt.h b/tirpc/rpc/clnt.h
index 9ee619e..05f2215 100644
--- a/tirpc/rpc/clnt.h
+++ b/tirpc/rpc/clnt.h
@@ -42,7 +42,6 @@
#include <rpc/clnt_stat.h>
#include <rpc/auth.h>
-#include <sys/cdefs.h>
#include <netconfig.h>
#include <sys/un.h>
@@ -267,7 +266,9 @@ struct rpc_timers {
* Generic client creation routine. Supported protocols are those that
* belong to the nettype namespace (/etc/netconfig).
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern CLIENT *clnt_create(const char *, const rpcprog_t, const rpcvers_t,
const char *);
/*
@@ -414,32 +415,46 @@ extern CLIENT *clnt_dg_create(const int, const struct netbuf *,
*/
extern CLIENT *clnt_raw_create(rpcprog_t, rpcvers_t);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Print why creation failed
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern void clnt_pcreateerror(const char *); /* stderr */
extern char *clnt_spcreateerror(const char *); /* string */
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Like clnt_perror(), but is more verbose in its output
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern void clnt_perrno(enum clnt_stat); /* stderr */
extern char *clnt_sperrno(enum clnt_stat); /* string */
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Print an English error message, given the client error code
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern void clnt_perror(CLIENT *, const char *); /* stderr */
extern char *clnt_sperror(CLIENT *, const char *); /* string */
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
@@ -450,9 +465,13 @@ struct rpc_createerr {
struct rpc_err cf_error; /* useful when cf_stat == RPC_PMAPFAILURE */
};
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern struct rpc_createerr *__rpc_createerr(void);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#define get_rpc_createerr() (*(__rpc_createerr()))
#define rpc_createerr (*(__rpc_createerr()))
@@ -469,12 +488,16 @@ __END_DECLS
* char *out;
* const char *nettype;
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern enum clnt_stat rpc_call(const char *, const rpcprog_t,
const rpcvers_t, const rpcproc_t,
const xdrproc_t, const char *,
const xdrproc_t, char *, const char *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* RPC broadcast interface
@@ -522,7 +545,9 @@ __END_DECLS
typedef bool_t (*resultproc_t)(caddr_t, ...);
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern enum clnt_stat rpc_broadcast(const rpcprog_t, const rpcvers_t,
const rpcproc_t, const xdrproc_t,
caddr_t, const xdrproc_t, caddr_t,
@@ -532,7 +557,9 @@ extern enum clnt_stat rpc_broadcast_exp(const rpcprog_t, const rpcvers_t,
caddr_t, const xdrproc_t, caddr_t,
const resultproc_t, const int,
const int, const char *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/* For backward compatibility */
#include <rpc/clnt_soc.h>
diff --git a/tirpc/rpc/clnt_soc.h b/tirpc/rpc/clnt_soc.h
index 82330a3..6ec545c 100644
--- a/tirpc/rpc/clnt_soc.h
+++ b/tirpc/rpc/clnt_soc.h
@@ -46,7 +46,6 @@
* with TS-RPC.
*/
-#include <sys/cdefs.h>
#define UDPMSGSIZE 8800 /* rpc imposed limit on udp msg size */
@@ -61,27 +60,39 @@
* u_int sendsz;
* u_int recvsz;
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern CLIENT *clnttcp_create(struct sockaddr_in *, u_long, u_long, int *,
u_int, u_int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Raw (memory) rpc.
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern CLIENT *clntraw_create(u_long, u_long);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
IPv6 socket version
*/
#ifdef INET6
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern CLIENT *clnttcp6_create(struct sockaddr_in6 *, u_long, u_long, int *,
u_int, u_int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif
/*
@@ -105,7 +116,9 @@ __END_DECLS
* u_int sendsz;
* u_int recvsz;
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern CLIENT *clntudp_create(struct sockaddr_in *, u_long, u_long,
struct timeval, int *);
extern CLIENT *clntudp_bufcreate(struct sockaddr_in *, u_long, u_long,
@@ -116,7 +129,9 @@ extern CLIENT *clntudp6_create(struct sockaddr_in6 *, u_long, u_long,
extern CLIENT *clntudp6_bufcreate(struct sockaddr_in6 *, u_long, u_long,
struct timeval, int *, u_int, u_int);
#endif
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* _RPC_CLNT_SOC_H */
diff --git a/tirpc/rpc/des_crypt.h b/tirpc/rpc/des_crypt.h
index 837088c..2358960 100644
--- a/tirpc/rpc/des_crypt.h
+++ b/tirpc/rpc/des_crypt.h
@@ -43,7 +43,6 @@
#ifndef _DES_DES_CRYPT_H
#define _DES_DES_CRYPT_H
-#include <sys/cdefs.h>
#include <rpc/rpc.h>
#define DES_MAXDATA 8192 /* max bytes encrypted in one call */
@@ -83,23 +82,35 @@
/*
* Cipher Block Chaining mode
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
int cbc_crypt( char *, char *, unsigned int, unsigned int, char *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Electronic Code Book mode
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
int ecb_crypt( char *, char *, unsigned int, unsigned int );
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Set des parity for a key.
* DES parity is odd and in the low bit of each byte
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
void des_setparity( char *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* _DES_DES_CRYPT_H */
diff --git a/tirpc/rpc/nettype.h b/tirpc/rpc/nettype.h
index 92063c6..926797a 100644
--- a/tirpc/rpc/nettype.h
+++ b/tirpc/rpc/nettype.h
@@ -53,11 +53,15 @@
#define _RPC_TCP 7
#define _RPC_UDP 8
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern void *__rpc_setconf(const char *);
extern void __rpc_endconf(void *);
extern struct netconfig *__rpc_getconf(void *);
extern struct netconfig *__rpc_getconfip(const char *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* !_TIRPC_NETTYPE_H */
diff --git a/tirpc/rpc/pmap_clnt.h b/tirpc/rpc/pmap_clnt.h
index 0d23908..6abd583 100644
--- a/tirpc/rpc/pmap_clnt.h
+++ b/tirpc/rpc/pmap_clnt.h
@@ -63,9 +63,10 @@
#ifndef _RPC_PMAP_CLNT_H_
#define _RPC_PMAP_CLNT_H_
-#include <sys/cdefs.h>
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern bool_t pmap_set(u_long, u_long, int, int);
extern bool_t pmap_unset(u_long, u_long);
extern struct pmaplist *pmap_getmaps(struct sockaddr_in *);
@@ -80,6 +81,8 @@ extern enum clnt_stat clnt_broadcast(u_long, u_long, u_long,
resultproc_t);
extern u_short pmap_getport(struct sockaddr_in *,
u_long, u_long, u_int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* !_RPC_PMAP_CLNT_H_ */
diff --git a/tirpc/rpc/pmap_prot.h b/tirpc/rpc/pmap_prot.h
index c1a2546..75354ce 100644
--- a/tirpc/rpc/pmap_prot.h
+++ b/tirpc/rpc/pmap_prot.h
@@ -71,7 +71,6 @@
#ifndef _RPC_PMAP_PROT_H
#define _RPC_PMAP_PROT_H
-#include <sys/cdefs.h>
#define PMAPPORT ((u_short)111)
#define PMAPPROG ((u_long)100000)
@@ -97,10 +96,14 @@ struct pmaplist {
struct pmaplist *pml_next;
};
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern bool_t xdr_pmap(XDR *, struct pmap *);
extern bool_t xdr_pmaplist(XDR *, struct pmaplist **);
extern bool_t xdr_pmaplist_ptr(XDR *, struct pmaplist *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* !_RPC_PMAP_PROT_H */
diff --git a/tirpc/rpc/pmap_rmt.h b/tirpc/rpc/pmap_rmt.h
index dd59a15..2a385e7 100644
--- a/tirpc/rpc/pmap_rmt.h
+++ b/tirpc/rpc/pmap_rmt.h
@@ -41,7 +41,6 @@
#ifndef _RPC_PMAP_RMT_H
#define _RPC_PMAP_RMT_H
-#include <sys/cdefs.h>
struct rmtcallargs {
u_long prog, vers, proc, arglen;
@@ -56,9 +55,13 @@ struct rmtcallres {
xdrproc_t xdr_results;
};
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern bool_t xdr_rmtcall_args(XDR *, struct rmtcallargs *);
extern bool_t xdr_rmtcallres(XDR *, struct rmtcallres *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* !_RPC_PMAP_RMT_H */
diff --git a/tirpc/rpc/rpc.h b/tirpc/rpc/rpc.h
index 6c0222e..fac2fa9 100644
--- a/tirpc/rpc/rpc.h
+++ b/tirpc/rpc/rpc.h
@@ -79,9 +79,11 @@
#define UDPMSGSIZE 8800
#endif
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern int get_myaddress(struct sockaddr_in *);
-extern int bindresvport(int, struct sockaddr_in *) __THROW;
+extern int bindresvport(int, struct sockaddr_in *);
extern int registerrpc(int, int, int, char *(*)(char [UDPMSGSIZE]),
xdrproc_t, xdrproc_t);
extern int callrpc(const char *, int, int, int, xdrproc_t, void *,
@@ -93,18 +95,24 @@ struct netbuf *uaddr2taddr(const struct netconfig *, const char *);
struct sockaddr;
extern int bindresvport_sa(int, struct sockaddr *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* The following are not exported interfaces, they are for internal library
* and rpcbind use only. Do not use, they may change without notice.
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
int __rpc_nconf2fd(const struct netconfig *);
int __rpc_nconf2fd_flags(const struct netconfig *, int);
int __rpc_nconf2sockinfo(const struct netconfig *, struct __rpc_sockinfo *);
int __rpc_fd2sockinfo(int, struct __rpc_sockinfo *);
u_int __rpc_get_t_size(int, int, int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* !_RPC_RPC_H */
diff --git a/tirpc/rpc/rpc_com.h b/tirpc/rpc/rpc_com.h
index cb3bbbb..236fcee 100644
--- a/tirpc/rpc/rpc_com.h
+++ b/tirpc/rpc/rpc_com.h
@@ -41,7 +41,6 @@
#ifndef _RPC_RPCCOM_H
#define _RPC_RPCCOM_H
-#include <sys/cdefs.h>
/* #pragma ident "@(#)rpc_com.h 1.11 93/07/05 SMI" */
@@ -55,7 +54,9 @@
#define __RPC_GETXID(now) ((u_int32_t)getpid() ^ (u_int32_t)(now)->tv_sec ^ \
(u_int32_t)(now)->tv_usec)
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern u_int __rpc_get_a_size(int);
extern int __rpc_dtbsize(void);
extern int _rpc_dtablesize(void);
@@ -77,6 +78,8 @@ bool_t rpc_control(int,void *);
char *_get_next_token(char *, int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* _RPC_RPCCOM_H */
diff --git a/tirpc/rpc/rpc_msg.h b/tirpc/rpc/rpc_msg.h
index 16d8eef..f7aabd8 100644
--- a/tirpc/rpc/rpc_msg.h
+++ b/tirpc/rpc/rpc_msg.h
@@ -161,7 +161,9 @@ struct rpc_msg {
#define acpted_rply ru.RM_rmb.ru.RP_ar
#define rjcted_rply ru.RM_rmb.ru.RP_dr
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
/*
* XDR routine to handle a rpc message.
* xdr_callmsg(xdrs, cmsg)
@@ -210,6 +212,8 @@ extern bool_t xdr_rejected_reply(XDR *, struct rejected_reply *);
* struct rpc_err *error;
*/
extern void _seterr_reply(struct rpc_msg *, struct rpc_err *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* !_TIRPC_RPC_MSG_H */
diff --git a/tirpc/rpc/rpcb_clnt.h b/tirpc/rpc/rpcb_clnt.h
index 7e64f8f..86d81f6 100644
--- a/tirpc/rpc/rpcb_clnt.h
+++ b/tirpc/rpc/rpcb_clnt.h
@@ -59,7 +59,9 @@
#include <rpc/types.h>
#include <rpc/rpcb_prot.h>
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern bool_t rpcb_set(const rpcprog_t, const rpcvers_t,
const struct netconfig *, const struct netbuf *);
extern bool_t rpcb_unset(const rpcprog_t, const rpcvers_t,
@@ -78,6 +80,8 @@ extern bool_t rpcb_getaddr(const rpcprog_t, const rpcvers_t,
extern bool_t rpcb_gettime(const char *, time_t *);
extern char *rpcb_taddr2uaddr(struct netconfig *, struct netbuf *);
extern struct netbuf *rpcb_uaddr2taddr(struct netconfig *, char *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* !_RPC_RPCB_CLNT_H */
diff --git a/tirpc/rpc/rpcent.h b/tirpc/rpc/rpcent.h
index c865e51..147f909 100644
--- a/tirpc/rpc/rpcent.h
+++ b/tirpc/rpc/rpcent.h
@@ -44,10 +44,12 @@
/* #pragma ident "@(#)rpcent.h 1.13 94/04/25 SMI" */
/* @(#)rpcent.h 1.1 88/12/06 SMI */
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
/* These are defined in /usr/include/rpc/netdb.h */
-#if 0
+#if !defined(__GLIBC__)
struct rpcent {
char *r_name; /* name of server for this rpc program */
char **r_aliases; /* alias list */
@@ -60,8 +62,10 @@ extern struct rpcent *getrpcbynumber(int);
extern struct rpcent *getrpcent(void);
#endif
-extern void setrpcent(int) __THROW;
-extern void endrpcent(void) __THROW;
-__END_DECLS
+extern void setrpcent(int);
+extern void endrpcent(void);
+#ifdef __cplusplus
+}
+#endif
#endif /* !_RPC_CENT_H */
diff --git a/tirpc/rpc/svc.h b/tirpc/rpc/svc.h
index b9691a8..8273c95 100644
--- a/tirpc/rpc/svc.h
+++ b/tirpc/rpc/svc.h
@@ -40,7 +40,6 @@
#ifndef _TIRPC_SVC_H
#define _TIRPC_SVC_H
-#include <sys/cdefs.h>
/*
* This interface must manage two items concerning remote procedure calling:
@@ -200,11 +199,15 @@ struct svc_req {
* const struct netconfig *nconf;
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern bool_t svc_reg(SVCXPRT *, const rpcprog_t, const rpcvers_t,
void (*)(struct svc_req *, SVCXPRT *),
const struct netconfig *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Service un-registration
@@ -214,9 +217,13 @@ __END_DECLS
* const rpcvers_t vers;
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern void svc_unreg(const rpcprog_t, const rpcvers_t);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Transport registration.
@@ -224,9 +231,13 @@ __END_DECLS
* xprt_register(xprt)
* SVCXPRT *xprt;
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern void xprt_register(SVCXPRT *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Transport un-register
@@ -234,9 +245,13 @@ __END_DECLS
* xprt_unregister(xprt)
* SVCXPRT *xprt;
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern void xprt_unregister(SVCXPRT *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
@@ -265,7 +280,9 @@ __END_DECLS
* deadlock the caller and server processes!
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern bool_t svc_sendreply(SVCXPRT *, xdrproc_t, void *);
extern void svcerr_decode(SVCXPRT *);
extern void svcerr_weakauth(SVCXPRT *);
@@ -277,7 +294,9 @@ extern void svcerr_systemerr(SVCXPRT *);
extern int rpc_reg(rpcprog_t, rpcvers_t, rpcproc_t,
char *(*)(char *), xdrproc_t, xdrproc_t,
char *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Lowest level dispatching -OR- who owns this process anyway.
@@ -306,11 +325,17 @@ extern int svc_fds;
* a small program implemented by the svc_rpc implementation itself;
* also see clnt.h for protocol numbers.
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern void rpctest_service(void);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern void svc_getreq(int);
extern void svc_getreqset(fd_set *);
extern void svc_getreq_common(int);
@@ -319,7 +344,9 @@ extern void svc_getreq_poll(struct pollfd *, int);
extern void svc_run(void);
extern void svc_exit(void);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Socket to use on svcxxx_create call to get default socket
@@ -331,7 +358,9 @@ __END_DECLS
* These are the existing service side transport implementations
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
/*
* Transport independent svc_create routine.
*/
@@ -427,7 +456,9 @@ int svc_dg_enablecache(SVCXPRT *, const u_int);
int __rpc_get_local_uid(SVCXPRT *_transp, uid_t *_uid);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/* for backward compatibility */
diff --git a/tirpc/rpc/svc_auth.h b/tirpc/rpc/svc_auth.h
index 723c989..67608d0 100644
--- a/tirpc/rpc/svc_auth.h
+++ b/tirpc/rpc/svc_auth.h
@@ -65,13 +65,17 @@ typedef struct SVCAUTH {
/*
* Server side authenticator
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern enum auth_stat _gss_authenticate(struct svc_req *, struct rpc_msg *,
bool_t *);
extern enum auth_stat _authenticate(struct svc_req *, struct rpc_msg *);
extern int svc_auth_reg(int, enum auth_stat (*)(struct svc_req *,
struct rpc_msg *));
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* !_RPC_SVC_AUTH_H */
diff --git a/tirpc/rpc/svc_soc.h b/tirpc/rpc/svc_soc.h
index 6148d7b..9b7befa 100644
--- a/tirpc/rpc/svc_soc.h
+++ b/tirpc/rpc/svc_soc.h
@@ -38,7 +38,6 @@
#ifndef _RPC_SVC_SOC_H
#define _RPC_SVC_SOC_H
-#include <sys/cdefs.h>
/* #pragma ident "@(#)svc_soc.h 1.11 94/04/25 SMI" */
/* svc_soc.h 1.8 89/05/01 SMI */
@@ -64,10 +63,14 @@
* void (*dispatch)();
* int protocol; like TCP or UDP, zero means do not register
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern bool_t svc_register(SVCXPRT *, u_long, u_long,
void (*)(struct svc_req *, SVCXPRT *), int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Service un-registration
@@ -76,44 +79,64 @@ __END_DECLS
* u_long prog;
* u_long vers;
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern void svc_unregister(u_long, u_long);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Memory based rpc for testing and timing.
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern SVCXPRT *svcraw_create(void);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Udp based rpc.
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern SVCXPRT *svcudp_create(int);
extern SVCXPRT *svcudp_bufcreate(int, u_int, u_int);
extern int svcudp_enablecache(SVCXPRT *, u_long);
extern SVCXPRT *svcudp6_create(int);
extern SVCXPRT *svcudp6_bufcreate(int, u_int, u_int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Tcp based rpc.
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern SVCXPRT *svctcp_create(int, u_int, u_int);
extern SVCXPRT *svctcp6_create(int, u_int, u_int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Fd based rpc.
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern SVCXPRT *svcfd_create(int, u_int, u_int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* !_RPC_SVC_SOC_H */
diff --git a/tirpc/rpc/xdr.h b/tirpc/rpc/xdr.h
index 613fab0..917c067 100644
--- a/tirpc/rpc/xdr.h
+++ b/tirpc/rpc/xdr.h
@@ -40,7 +40,6 @@
#ifndef _TIRPC_XDR_H
#define _TIRPC_XDR_H
-#include <sys/cdefs.h>
#include <stdio.h>
#include <netinet/in.h>
@@ -287,7 +286,9 @@ struct xdr_discrim {
/*
* These are the "generic" xdr routines.
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
extern bool_t xdr_void(void);
extern bool_t xdr_int(XDR *, int *);
extern bool_t xdr_u_int(XDR *, u_int *);
@@ -330,7 +331,9 @@ extern bool_t xdr_hyper(XDR *, quad_t *);
extern bool_t xdr_u_hyper(XDR *, u_quad_t *);
extern bool_t xdr_longlong_t(XDR *, quad_t *);
extern bool_t xdr_u_longlong_t(XDR *, u_quad_t *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
/*
* Common opaque bytes objects used by many rpc protocols;
@@ -348,7 +351,9 @@ extern bool_t xdr_netobj(XDR *, struct netobj *);
* These are the public routines for the various implementations of
* xdr streams.
*/
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
/* XDR using memory buffers */
extern void xdrmem_create(XDR *, char *, u_int, enum xdr_op);
@@ -369,6 +374,8 @@ extern bool_t xdrrec_skiprecord(XDR *);
/* true if no more input */
extern bool_t xdrrec_eof(XDR *);
extern u_int xdrrec_readbytes(XDR *, caddr_t, u_int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
#endif /* !_TIRPC_XDR_H */