diff --git a/Makefile.am b/Makefile.am index 88ae210..b3a6e91 100644 --- a/Makefile.am +++ b/Makefile.am @@ -40,7 +40,12 @@ EXTRA_DIST = \ aclocal/bsdsignals.m4 \ aclocal/nfs-utils.m4 \ aclocal/kerberos5.m4 \ - aclocal/tcp-wrappers.m4 + aclocal/tcp-wrappers.m4 \ + aclocal/libtirpc.m4 \ + aclocal/libevent.m4 \ + aclocal/libnfsidmap.m4 \ + aclocal/rpcsec_vers.m4 \ + aclocal/ipv6.m4 ACLOCAL_AMFLAGS = -I aclocal diff --git a/aclocal/ipv6.m4 b/aclocal/ipv6.m4 new file mode 100644 index 0000000..0564b3e --- /dev/null +++ b/aclocal/ipv6.m4 @@ -0,0 +1,29 @@ +dnl Checks for IPv6 support +dnl +AC_DEFUN([AC_IPV6], [ + + AC_CHECK_DECL([AI_ADDRCONFIG], + [AC_DEFINE([HAVE_DECL_AI_ADDRCONFIG], 1, + [Define this to 1 if AI_ADDRCONFIG macro is defined])], , + [ #include ]) + + if test "$enable_ipv6" = yes; then + + dnl TI-RPC required for IPv6 + if test "$enable_tirpc" = no; then + AC_MSG_ERROR(['--enable-ipv6' requires '--enable-tirpc'.]) + fi + + dnl IPv6-enabled networking functions required for IPv6 + AC_CHECK_FUNCS([getnameinfo bindresvport_sa], , , + [AC_MSG_ERROR([Missing functions needed for IPv6.])]) + + dnl Need to detect presence of IPv6 networking at run time via + dnl getaddrinfo(3); old versions of glibc do not support ADDRCONFIG + AC_CHECK_DECL([AI_ADDRCONFIG], , + [AC_MSG_ERROR([full getaddrinfo(3) implementation needed for IPv6 support])], + [ #include ]) + + fi + +])dnl diff --git a/aclocal/libevent.m4 b/aclocal/libevent.m4 new file mode 100644 index 0000000..3c962b3 --- /dev/null +++ b/aclocal/libevent.m4 @@ -0,0 +1,11 @@ +dnl Checks for libevent +AC_DEFUN([AC_LIBEVENT], [ + + dnl Check for libevent, but do not add -levent to LIBS + AC_CHECK_LIB([event], [event_dispatch], [libevent=1], + [AC_MSG_ERROR([libevent not found.])]) + + AC_CHECK_HEADERS([event.h], , + [AC_MSG_ERROR([libevent headers not found.])]) + +])dnl diff --git a/aclocal/libnfsidmap.m4 b/aclocal/libnfsidmap.m4 new file mode 100644 index 0000000..cfcde2f --- /dev/null +++ b/aclocal/libnfsidmap.m4 @@ -0,0 +1,17 @@ +dnl Checks for libnfsidmap +dnl +AC_DEFUN([AC_LIBNFSIDMAP], [ + + dnl Check for libnfsidmap, but do not add -lnfsidmap to LIBS + AC_CHECK_LIB([nfsidmap], [nfs4_init_name_mapping], [libnfsidmap=1], + [AC_MSG_ERROR([libnfsidmap not found.])]) + + AC_CHECK_HEADERS([nfsidmap.h], , + [AC_MSG_ERROR([libnfsidmap headers not found.])]) + + dnl nfs4_set_debug() doesn't appear in all versions of libnfsidmap + AC_CHECK_LIB([nfsidmap], [nfs4_set_debug], + [AC_DEFINE([HAVE_NFS4_SET_DEBUG], 1, + [Define to 1 if you have the `nfs4_set_debug' function.])]) + +])dnl diff --git a/aclocal/librpcsecgss.m4 b/aclocal/librpcsecgss.m4 new file mode 100644 index 0000000..d1dd25e --- /dev/null +++ b/aclocal/librpcsecgss.m4 @@ -0,0 +1,19 @@ +dnl Checks for rpcsecgss library and headers +dnl KRB5LIBS must be set before this function is invoked. +dnl +AC_DEFUN([AC_LIBRPCSECGSS], [ + + dnl libtirpc provides an rpcsecgss API + if test "$enable_tirpc" = no; then + + dnl Check for library, but do not add -lrpcsecgss to LIBS + AC_CHECK_LIB([rpcsecgss], [authgss_create_default], [librpcsecgss=1], + [AC_MSG_ERROR([librpcsecgss not found.])]) + + AC_CHECK_LIB([rpcsecgss], [authgss_set_debug_level], + [AC_DEFINE([HAVE_AUTHGSS_SET_DEBUG_LEVEL], 1, + [Define to 1 if you have the `authgss_set_debug_level' function.])]) + + fi + +])dnl diff --git a/aclocal/libtirpc.m4 b/aclocal/libtirpc.m4 new file mode 100644 index 0000000..af4c7d3 --- /dev/null +++ b/aclocal/libtirpc.m4 @@ -0,0 +1,28 @@ +dnl Checks for TI-RPC library and headers +dnl +AC_DEFUN([AC_LIBTIRPC], [ + + AC_ARG_WITH([tirpcinclude], + [AC_HELP_STRING([--with-tirpcinclude=DIR], + [use TI-RPC headers in DIR])], + [tirpc_header_dir=$withval], + [tirpc_header_dir=/usr/include/tirpc]) + + dnl if --enable-tirpc was specifed, the following components + dnl must be present, and we set up HAVE_ macros for them. + + if test "$enable_tirpc" = yes; then + + dnl look for the library; add to LIBS if found + AC_CHECK_LIB([tirpc], [clnt_tli_create], , + [AC_MSG_ERROR([libtirpc not found.])]) + + dnl also must have the headers installed where we expect + dnl look for headers; add -I compiler option if found + AC_CHECK_HEADERS([${tirpc_header_dir}/netconfig.h], , + [AC_MSG_ERROR([libtirpc headers not found.])]) + AC_SUBST([AM_CPPFLAGS], ["-I${tirpc_header_dir}"]) + + fi + +])dnl diff --git a/aclocal/rpcsec_vers.m4 b/aclocal/rpcsec_vers.m4 new file mode 100644 index 0000000..e59c0aa --- /dev/null +++ b/aclocal/rpcsec_vers.m4 @@ -0,0 +1,12 @@ +dnl Checks librpcsec version +AC_DEFUN([AC_RPCSEC_VERSION], [ + + dnl TI-RPC replaces librpcsecgss, but we still need libgssglue + if test "$enable_tirpc" = no; then + PKG_CHECK_MODULES([RPCSECGSS], [librpcsecgss >= 0.16], , + [AC_MSG_ERROR([Unable to locate information required to use librpcsecgss. If you have pkgconfig installed, you might try setting environment variable PKG_CONFIG_PATH to /usr/local/lib/pkgconfig])]) + else + PKG_CHECK_MODULES([GSSGLUE], [libgssglue >= 0.1]) + fi + +])dnl diff --git a/configure.ac b/configure.ac index 5db4417..e34b7e2 100644 --- a/configure.ac +++ b/configure.ac @@ -118,6 +118,11 @@ AC_ARG_ENABLE(mount, enable_mount=$enableval, enable_mount=yes) AM_CONDITIONAL(CONFIG_MOUNT, [test "$enable_mount" = "yes"]) +AC_ARG_ENABLE(tirpc, + [AC_HELP_STRING([--enable-tirpc], + [enable use of TI-RPC @<:@default=no@:>@])], + enable_tirpc=$enableval, + enable_tirpc=no) AC_ARG_ENABLE(ipv6, [AC_HELP_STRING([--enable-ipv6], [enable support for IPv6 @<:@default=no@:>@])], @@ -131,13 +136,8 @@ AC_ARG_ENABLE(ipv6, AC_SUBST(enable_ipv6) AM_CONDITIONAL(CONFIG_IPV6, [test "$enable_ipv6" = "yes"]) -AC_ARG_ENABLE(tirpc, - [AC_HELP_STRING([--enable-tirpc], - [enable use of TI-RPC @<:@default=no@:>@])], - enable_tirpc=$enableval, - enable_tirpc=no) - AC_SUBST(enable_tirpc) - AM_CONDITIONAL(CONFIG_TIRPC, [test "$enable_tirpc" = "yes"]) +dnl Check for TI-RPC library and headers +AC_LIBTIRPC # Check whether user wants TCP wrappers support AC_TCP_WRAPPERS @@ -176,39 +176,40 @@ AC_BSD_SIGNALS dnl ************************************************************* dnl * Check for required libraries dnl ************************************************************* -AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname, [LIBNSL="-lnsl"])]) + +AC_CHECK_FUNC([gethostbyname], , + [AC_CHECK_LIB([nsl], [gethostbyname], [LIBNSL="-lnsl"])]) AC_SUBST(LIBNSL) -AC_CHECK_FUNC(connect, , - AC_CHECK_LIB(socket, connect, [LIBSOCKET="-lsocket"], - AC_MSG_ERROR(Function 'socket' not found.), $LIBNSL)) +AC_CHECK_FUNC([connect], , + [AC_CHECK_LIB([socket], [connect], [LIBSOCKET="-lsocket"], + [AC_MSG_ERROR([Function 'socket' not found.])], [$LIBNSL])]) + +AC_CHECK_FUNC([getaddrinfo], , , + [AC_MSG_ERROR([Function 'getaddrinfo' not found.])]) -AC_CHECK_FUNC(getaddrinfo, , , - AC_MSG_ERROR(Function 'getaddrinfo' not found.)) +AC_CHECK_FUNC([getrpcbynumber], , , + [AC_MSG_ERROR([Function 'getrpcbynumber' not found.])]) -AC_CHECK_FUNC(getrpcbynumber, , , - AC_MSG_ERROR(Function 'getrpcbynumber' not found.)) +AC_CHECK_FUNC([getservbyname], , , + [AC_MSG_ERROR([Function 'getservbyname' not found.])]) -AC_CHECK_FUNC(getservbyname, , , - AC_MSG_ERROR(Function 'getservbyname' not found.)) +AC_CHECK_LIB([crypt], [crypt], [LIBCRYPT="-lcrypt"]) -AC_CHECK_LIB(crypt, crypt, [LIBCRYPT="-lcrypt"]) if test "$enable_nfsv4" = yes; then - AC_CHECK_LIB(event, event_dispatch, [libevent=1], AC_MSG_ERROR([libevent needed for nfsv4 support])) - AC_CHECK_LIB(nfsidmap, nfs4_init_name_mapping, [libnfsidmap=1], AC_MSG_ERROR([libnfsidmap needed for nfsv4 support])) - AC_CHECK_HEADERS(event.h, ,AC_MSG_ERROR([libevent needed for nfsv4 support])) - AC_CHECK_HEADERS(nfsidmap.h, ,AC_MSG_ERROR([libnfsidmap needed for nfsv4 support])) - dnl librpcsecgss already has a dependency on libgssapi, - dnl but we need to make sure we get the right version - if test "$enable_gss" = yes; then - PKG_CHECK_MODULES(RPCSECGSS, librpcsecgss >= 0.16, , - [AC_MSG_ERROR([Unable to locate information required to use librpcsecgss. If you have pkgconfig installed, you might try setting environment variable PKG_CONFIG_PATH to /usr/local/lib/pkgconfig]) - ] - ) - PKG_CHECK_MODULES(GSSGLUE, libgssglue >= 0.1) - fi + dnl check for libevent libraries and headers + AC_LIBEVENT + + dnl check for nfsidmap libraries and headers + AC_LIBNFSIDMAP + dnl librpcsecgss already has a dependency on libgssapi, + dnl but we need to make sure we get the right version + if test "$enable_gss" = yes; then + AC_RPCSEC_VERSION + fi fi + if test "$knfsd_cv_glibc2" = no; then AC_CHECK_LIB(bsd, daemon, [LIBBSD="-lbsd"]) fi @@ -236,49 +237,21 @@ AC_SUBST(LIBBLKID) if test "$enable_gss" = yes; then dnl 'gss' also depends on nfsidmap.h - at least for svcgssd_proc.c - AC_CHECK_HEADERS(nfsidmap.h, ,AC_MSG_ERROR([libnfsidmap needed for gss support])) - AC_CHECK_HEADERS(spkm3.h, ,AC_MSG_WARN([could not locate SPKM3 header; will not have SPKM3 support])) - dnl the nfs4_set_debug function doesn't appear in all version of the library - AC_CHECK_LIB(nfsidmap, nfs4_set_debug, - AC_DEFINE(HAVE_NFS4_SET_DEBUG,1, - [Whether nfs4_set_debug() is present in libnfsidmap]),) + AC_LIBNFSIDMAP + + AC_CHECK_HEADERS([spkm3.h], , + [AC_MSG_WARN([Could not locate SPKM3 header; will not have SPKM3 support])]) dnl Check for Kerberos V5 AC_KERBEROS_V5 - dnl This is not done until here because we need to have KRBLIBS set - dnl ("librpcsecgss=1" is so that it doesn't get added to LIBS) - AC_CHECK_LIB(rpcsecgss, authgss_create_default, [librpcsecgss=1], AC_MSG_ERROR([librpcsecgss needed for nfsv4 support]), -lgssglue -ldl) - AC_CHECK_LIB(rpcsecgss, authgss_set_debug_level, - AC_DEFINE(HAVE_AUTHGSS_SET_DEBUG_LEVEL, 1, [Define this if the rpcsec_gss library has the function authgss_set_debug_level]),, -lgssglue -ldl) + dnl Invoked after AC_KERBEROS_V5; AC_LIBRPCSECGSS needs to have KRBLIBS set + AC_LIBRPCSECGSS fi -AC_CHECK_DECL([AI_ADDRCONFIG], - AC_DEFINE([HAVE_DECL_AI_ADDRCONFIG], 1, - [Define this to 1 if AI_ADDRCONFIG macro is defined]), , - [ #include ] ) - -if test "$enable_tirpc" = yes; then - AC_CHECK_LIB(tirpc, clnt_tli_create, , - AC_MSG_ERROR([libtirpc not found.])) - AC_CHECK_HEADERS(tirpc/netconfig.h, , - AC_MSG_ERROR([libtirpc headers not found.])) - AC_CHECK_FUNCS([bindresvport_sa getnetconfig \ - clnt_create clnt_create_timed \ - clnt_vc_create clnt_dg_create xdr_rpcb]) -fi - -if test "$enable_ipv6" = yes; then - if test "$enable_tirpc" = no; then - AC_MSG_ERROR('--enable-ipv6' requires '--enable-tirpc'.) - fi - AC_CHECK_FUNC(getnameinfo, , , - AC_MSG_ERROR(Function 'getnameinfo' not found.)) - AC_CHECK_DECL([AI_ADDRCONFIG], , - AC_MSG_ERROR([full getaddrinfo(3) implementation needed for IPv6 support]), - [ #include ] ) -fi +dnl Check for IPv6 support +AC_IPV6 dnl ************************************************************* dnl Check for headers diff --git a/support/nfs/getport.c b/support/nfs/getport.c index 5da1749..734d21a 100644 --- a/support/nfs/getport.c +++ b/support/nfs/getport.c @@ -40,9 +40,9 @@ #include #include -#ifdef HAVE_TIRPC_NETCONFIG_H -#include -#include +#ifdef HAVE_LIBTIRPC +#include +#include #endif #include "nfsrpc.h" @@ -53,17 +53,17 @@ * Rpcbind's local socket service does not seem to be working. * Disable this logic for now. */ -#ifdef HAVE_XDR_RPCB +#ifdef HAVE_LIBTIRPC #undef NFS_GP_LOCAL -#else /* HAVE_XDR_RPCB */ +#else /* !HAVE_LIBTIRPC */ #undef NFS_GP_LOCAL -#endif /* HAVE_XDR_RPCB */ +#endif /* !HAVE_LIBTIRPC */ -#ifdef HAVE_XDR_RPCB +#ifdef HAVE_LIBTIRPC const static rpcvers_t default_rpcb_version = RPCBVERS_4; -#else +#else /* !HAVE_LIBTIRPC */ const static rpcvers_t default_rpcb_version = PMAPVERS; -#endif +#endif /* !HAVE_LIBTIRPC */ #ifdef HAVE_DECL_AI_ADDRCONFIG /* @@ -242,7 +242,7 @@ static CLIENT *nfs_gp_get_rpcbclient(const struct sockaddr *sap, * Returns a '\0'-terminated string if successful; otherwise NULL. * rpc_createerr.cf_stat is set to reflect the error. */ -#ifdef HAVE_XDR_RPCB +#ifdef HAVE_LIBTIRPC static char *nfs_gp_get_netid(const sa_family_t family, const unsigned short protocol) @@ -290,7 +290,7 @@ out: return NULL; } -#endif /* HAVE_XDR_RPCB */ +#endif /* HAVE_LIBTIRPC */ /* * Extract a port number from a universal address, and terminate the @@ -453,7 +453,7 @@ static int nfs_gp_ping(CLIENT *client, struct timeval timeout) return (int)(status == RPC_SUCCESS); } -#ifdef HAVE_XDR_RPCB +#ifdef HAVE_LIBTIRPC /* * Initialize the rpcb argument for a GETADDR request. @@ -565,7 +565,7 @@ static unsigned short nfs_gp_rpcb_getaddr(CLIENT *client, return port; } -#endif /* HAVE_XDR_RPCB */ +#endif /* HAVE_LIBTIRPC */ /* * Try GETPORT request via rpcbind version 2. @@ -595,7 +595,7 @@ static unsigned long nfs_gp_pmap_getport(CLIENT *client, return port; } -#ifdef HAVE_XDR_RPCB +#ifdef HAVE_LIBTIRPC static unsigned short nfs_gp_getport_rpcb(CLIENT *client, const struct sockaddr *sap, @@ -617,7 +617,7 @@ static unsigned short nfs_gp_getport_rpcb(CLIENT *client, return port; } -#endif /* HAVE_XDR_RPCB */ +#endif /* HAVE_LIBTIRPC */ static unsigned long nfs_gp_getport_pmap(CLIENT *client, const rpcprog_t program, @@ -652,11 +652,11 @@ static unsigned short nfs_gp_getport(CLIENT *client, struct timeval timeout) { switch (sap->sa_family) { -#ifdef HAVE_XDR_RPCB +#ifdef HAVE_LIBTIRPC case AF_INET6: return nfs_gp_getport_rpcb(client, sap, salen, program, version, protocol, timeout); -#endif /* HAVE_XDR_RPCB */ +#endif /* HAVE_LIBTIRPC */ case AF_INET: return nfs_gp_getport_pmap(client, program, version, protocol, timeout); @@ -922,7 +922,7 @@ unsigned short nfs_getlocalport(const rpcprot_t program, * address of the same address family. In this way an RPC server can * advertise via rpcbind that it does not support AF_INET6. */ -#ifdef HAVE_XDR_RPCB +#ifdef HAVE_LIBTIRPC unsigned short nfs_rpcb_getaddr(const struct sockaddr *sap, const socklen_t salen, @@ -955,7 +955,7 @@ unsigned short nfs_rpcb_getaddr(const struct sockaddr *sap, return port; } -#else /* HAVE_XDR_RPCB */ +#else /* !HAVE_LIBTIRPC */ unsigned short nfs_rpcb_getaddr(const struct sockaddr *sap, const socklen_t salen, @@ -971,7 +971,7 @@ unsigned short nfs_rpcb_getaddr(const struct sockaddr *sap, return 0; } -#endif /* HAVE_XDR_RPCB */ +#endif /* !HAVE_LIBTIRPC */ /** * nfs_pmap_getport - query rpcbind via the portmap protocol (rpcbindv2) diff --git a/support/nfs/rpc_socket.c b/support/nfs/rpc_socket.c index b7420d1..2b11e35 100644 --- a/support/nfs/rpc_socket.c +++ b/support/nfs/rpc_socket.c @@ -40,51 +40,10 @@ #include "nfsrpc.h" -#ifdef HAVE_TIRPC_NETCONFIG_H - -/* - * Most of the headers under /usr/include/tirpc are currently - * unusable for various reasons. We statically define the bits - * we need here until the official headers are fixed. - * - * The commonly used RPC calls such as CLNT_CALL and CLNT_DESTROY - * are actually virtual functions in both the legacy and TI-RPC - * implementations. The proper _CALL or _DESTROY will be invoked - * no matter if we used a legacy clnt_create() or clnt_tli_create() - * from libtirpc. - */ - -#include -#include - -/* definitions from tirpc/rpc/types.h */ - -/* - * The netbuf structure is used for transport-independent address storage. - */ -struct netbuf { - unsigned int maxlen; - unsigned int len; - void *buf; -}; - -/* definitions from tirpc/rpc/clnt.h */ - -/* - * Low level clnt create routine for connectionless transports, e.g. udp. - */ -extern CLIENT *clnt_dg_create(const int, const struct netbuf *, - const rpcprog_t, const rpcvers_t, - const u_int, const u_int); - -/* - * Low level clnt create routine for connectionful transports, e.g. tcp. - */ -extern CLIENT *clnt_vc_create(const int, const struct netbuf *, - const rpcprog_t, const rpcvers_t, - u_int, u_int); - -#endif /* HAVE_TIRPC_NETCONFIG_H */ +#ifdef HAVE_LIBTIRPC +#include +#include +#endif /* HAVE_LIBTIRPC */ /* * If "-1" is specified in the tv_sec field, use these defaults instead. @@ -107,14 +66,14 @@ static CLIENT *nfs_get_localclient(const struct sockaddr *sap, const rpcvers_t version, struct timeval *timeout) { -#ifdef HAVE_CLNT_VC_CREATE +#ifdef HAVE_LIBTIRPC struct sockaddr_storage address; const struct netbuf nbuf = { .maxlen = sizeof(struct sockaddr_un), .len = (size_t)salen, .buf = &address, }; -#endif /* HAVE_CLNT_VC_CREATE */ +#endif /* HAVE_LIBTIRPC */ CLIENT *client; int sock; @@ -128,13 +87,13 @@ static CLIENT *nfs_get_localclient(const struct sockaddr *sap, if (timeout->tv_sec == -1) timeout->tv_sec = NFSRPC_TIMEOUT_TCP; -#ifdef HAVE_CLNT_VC_CREATE +#ifdef HAVE_LIBTIRPC memcpy(nbuf.buf, sap, (size_t)salen); client = clnt_vc_create(sock, &nbuf, program, version, 0, 0); -#else /* HAVE_CLNT_VC_CREATE */ +#else /* !HAVE_LIBTIRPC */ client = clntunix_create((struct sockaddr_un *)sap, program, version, &sock, 0, 0); -#endif /* HAVE_CLNT_VC_CREATE */ +#endif /* !HAVE_LIBTIRPC */ if (client != NULL) CLNT_CONTROL(client, CLSET_FD_CLOSE, NULL); else @@ -261,23 +220,23 @@ static CLIENT *nfs_get_udpclient(const struct sockaddr *sap, const rpcvers_t version, struct timeval *timeout) { -#ifdef HAVE_CLNT_DG_CREATE + CLIENT *client; + int ret, sock; +#ifdef HAVE_LIBTIRPC struct sockaddr_storage address; const struct netbuf nbuf = { .maxlen = salen, .len = salen, .buf = &address, }; -#endif /* HAVE_CLNT_DG_CREATE */ - CLIENT *client; - int ret, sock; -#ifndef HAVE_CLNT_DG_CREATE +#else /* !HAVE_LIBTIRPC */ + if (sap->sa_family != AF_INET) { rpc_createerr.cf_stat = RPC_UNKNOWNPROTO; return NULL; } -#endif /* !HAVE_CLNT_DG_CREATE */ +#endif /* !HAVE_LIBTIRPC */ sock = socket((int)sap->sa_family, SOCK_DGRAM, IPPROTO_UDP); if (sock == -1) { @@ -305,13 +264,13 @@ static CLIENT *nfs_get_udpclient(const struct sockaddr *sap, return NULL; } -#ifdef HAVE_CLNT_DG_CREATE +#ifdef HAVE_LIBTIRPC memcpy(nbuf.buf, sap, (size_t)salen); client = clnt_dg_create(sock, &nbuf, program, version, 0, 0); -#else /* HAVE_CLNT_DG_CREATE */ +#else /* !HAVE_LIBTIRPC */ client = clntudp_create((struct sockaddr_in *)sap, program, version, *timeout, &sock); -#endif /* HAVE_CLNT_DG_CREATE */ +#endif /* !HAVE_LIBTIRPC */ if (client != NULL) { CLNT_CONTROL(client, CLSET_RETRY_TIMEOUT, (char *)timeout); CLNT_CONTROL(client, CLSET_FD_CLOSE, NULL); @@ -337,23 +296,23 @@ static CLIENT *nfs_get_tcpclient(const struct sockaddr *sap, const rpcvers_t version, struct timeval *timeout) { -#ifdef HAVE_CLNT_VC_CREATE + CLIENT *client; + int ret, sock; +#ifdef HAVE_LIBTIRPC struct sockaddr_storage address; const struct netbuf nbuf = { .maxlen = salen, .len = salen, .buf = &address, }; -#endif /* HAVE_CLNT_VC_CREATE */ - CLIENT *client; - int ret, sock; -#ifndef HAVE_CLNT_VC_CREATE +#else /* !HAVE_LIBTIRPC */ + if (sap->sa_family != AF_INET) { rpc_createerr.cf_stat = RPC_UNKNOWNPROTO; return NULL; } -#endif /* !HAVE_CLNT_VC_CREATE */ +#endif /* !HAVE_LIBTIRPC */ sock = socket((int)sap->sa_family, SOCK_STREAM, IPPROTO_TCP); if (sock == -1) { @@ -381,13 +340,13 @@ static CLIENT *nfs_get_tcpclient(const struct sockaddr *sap, return NULL; } -#ifdef HAVE_CLNT_VC_CREATE +#ifdef HAVE_LIBTIRPC memcpy(nbuf.buf, sap, (size_t)salen); client = clnt_vc_create(sock, &nbuf, program, version, 0, 0); -#else /* HAVE_CLNT_VC_CREATE */ +#else /* !HAVE_LIBTIRPC */ client = clnttcp_create((struct sockaddr_in *)sap, program, version, &sock, 0, 0); -#endif /* HAVE_CLNT_VC_CREATE */ +#endif /* !HAVE_LIBTIRPC */ if (client != NULL) CLNT_CONTROL(client, CLSET_FD_CLOSE, NULL); else diff --git a/utils/gssd/Makefile.am b/utils/gssd/Makefile.am index e42b339..95a2bd0 100644 --- a/utils/gssd/Makefile.am +++ b/utils/gssd/Makefile.am @@ -39,11 +39,11 @@ gssd_SOURCES = \ write_bytes.h gssd_LDADD = ../../support/nfs/libnfs.a \ - $(RPCSECGSS_LIBS) $(KRBLIBS) + $(RPCSECGSS_LIBS) $(GSSGLUE_LIBS) $(KRBLIBS) gssd_LDFLAGS = $(KRBLDFLAGS) gssd_CFLAGS = $(AM_CFLAGS) $(CFLAGS) \ - $(RPCSECGSS_CFLAGS) $(KRBCFLAGS) + $(RPCSECGSS_CFLAGS) $(GSSGLUE_CFLAGS) $(KRBCFLAGS) svcgssd_SOURCES = \ $(COMMON_SRCS) \ @@ -56,18 +56,18 @@ svcgssd_SOURCES = \ svcgssd_LDADD = \ ../../support/nfs/libnfs.a \ - $(RPCSECGSS_LIBS) -lnfsidmap \ + $(RPCSECGSS_LIBS) $(GSSGLUE_LIBS) -lnfsidmap \ $(KRBLIBS) svcgssd_LDFLAGS = $(KRBLDFLAGS) svcgssd_CFLAGS = $(AM_CFLAGS) $(CFLAGS) \ - $(RPCSECGSS_CFLAGS) $(KRBCFLAGS) + $(RPCSECGSS_CFLAGS) $(GSSGLUE_CFLAGS) $(KRBCFLAGS) gss_clnt_send_err_SOURCES = gss_clnt_send_err.c gss_clnt_send_err_CFLAGS = $(AM_CFLAGS) $(CFLAGS) \ - $(RPCSECGSS_CFLAGS) $(KRBCFLAGS) + $(RPCSECGSS_CFLAGS) $(GSSGLUE_CFLAGS) $(KRBCFLAGS) MAINTAINERCLEANFILES = Makefile.in diff --git a/utils/gssd/gssd_proc.c b/utils/gssd/gssd_proc.c index d0d3f7f..295c37d 100644 --- a/utils/gssd/gssd_proc.c +++ b/utils/gssd/gssd_proc.c @@ -70,7 +70,6 @@ #include "gssd.h" #include "err_util.h" #include "gss_util.h" -#include "gss_oids.h" #include "krb5_util.h" #include "context.h" @@ -778,8 +777,10 @@ handle_krb5_upcall(struct clnt_info *clp) out: if (token.value) free(token.value); +#ifndef HAVE_LIBTIRPC if (pd.pd_ctx_hndl.length != 0) authgss_free_private_data(&pd); +#endif if (auth) AUTH_DESTROY(auth); if (rpc_clnt) diff --git a/utils/gssd/krb5_util.c b/utils/gssd/krb5_util.c index 8923b3b..e3c6f5e 100644 --- a/utils/gssd/krb5_util.c +++ b/utils/gssd/krb5_util.c @@ -124,7 +124,6 @@ #include "gssd.h" #include "err_util.h" #include "gss_util.h" -#include "gss_oids.h" #include "krb5_util.h" /* Global list of principals/cache file names for machine credentials */ diff --git a/utils/gssd/krb5_util.h b/utils/gssd/krb5_util.h index 4b2da6b..7d808f5 100644 --- a/utils/gssd/krb5_util.h +++ b/utils/gssd/krb5_util.h @@ -3,6 +3,12 @@ #include +#ifdef HAVE_LIBTIRPC +#include +#else +#include "gss_oids.h" +#endif + /* * List of principals from our keytab that we * will try to use to obtain credentials diff --git a/utils/mountd/svc_run.c b/utils/mountd/svc_run.c index 422e839..5ba5af6 100644 --- a/utils/mountd/svc_run.c +++ b/utils/mountd/svc_run.c @@ -54,6 +54,10 @@ #include #include +#ifdef HAVE_LIBTIRPC +#include +#endif + void cache_set_fds(fd_set *fdset); int cache_process_req(fd_set *readfds);