X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=support%2Fnfs%2Frpc_socket.c;h=0e20824cb614e4a23e69799a05a52adbdce6b58b;hb=f0d3a4bedccca7cce48296757bc1c8bd59b80828;hp=a080487e891f3144927615d27fa9fa99ba8e8cee;hpb=c7fa61e76f072d97a9bdb4a551aa2ba28e5818cc;p=nfs-utils.git diff --git a/support/nfs/rpc_socket.c b/support/nfs/rpc_socket.c index a080487..0e20824 100644 --- a/support/nfs/rpc_socket.c +++ b/support/nfs/rpc_socket.c @@ -26,6 +26,8 @@ #include #include + +#include #include #include #include @@ -38,6 +40,7 @@ #include #include +#include "sockaddr.h" #include "nfsrpc.h" #ifdef HAVE_LIBTIRPC @@ -51,6 +54,7 @@ #define NFSRPC_TIMEOUT_UDP (3) #define NFSRPC_TIMEOUT_TCP (10) + /* * Set up an RPC client for communicating via a AF_LOCAL socket. * @@ -121,10 +125,10 @@ static int nfs_bind(const int sock, const sa_family_t family) switch (family) { case AF_INET: - return bind(sock, (struct sockaddr *)&sin, + return bind(sock, (struct sockaddr *)(char *)&sin, (socklen_t)sizeof(sin)); case AF_INET6: - return bind(sock, (struct sockaddr *)&sin6, + return bind(sock, (struct sockaddr *)(char *)&sin6, (socklen_t)sizeof(sin6)); } @@ -153,9 +157,9 @@ static int nfs_bindresvport(const int sock, const sa_family_t family) switch (family) { case AF_INET: - return bindresvport_sa(sock, (struct sockaddr *)&sin); + return bindresvport_sa(sock, (struct sockaddr *)(char *)&sin); case AF_INET6: - return bindresvport_sa(sock, (struct sockaddr *)&sin6); + return bindresvport_sa(sock, (struct sockaddr *)(char *)&sin6); } errno = EAFNOSUPPORT; @@ -440,9 +444,6 @@ CLIENT *nfs_get_rpcclient(const struct sockaddr *sap, const rpcvers_t version, struct timeval *timeout) { - struct sockaddr_in *sin = (struct sockaddr_in *)sap; - struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sap; - nfs_clear_rpc_createerr(); switch (sap->sa_family) { @@ -450,13 +451,8 @@ CLIENT *nfs_get_rpcclient(const struct sockaddr *sap, return nfs_get_localclient(sap, salen, program, version, timeout); case AF_INET: - if (sin->sin_port == 0) { - rpc_createerr.cf_stat = RPC_UNKNOWNADDR; - return NULL; - } - break; case AF_INET6: - if (sin6->sin6_port == 0) { + if (nfs_get_port(sap) == 0) { rpc_createerr.cf_stat = RPC_UNKNOWNADDR; return NULL; } @@ -505,9 +501,6 @@ CLIENT *nfs_get_priv_rpcclient(const struct sockaddr *sap, const rpcvers_t version, struct timeval *timeout) { - struct sockaddr_in *sin = (struct sockaddr_in *)sap; - struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sap; - nfs_clear_rpc_createerr(); switch (sap->sa_family) { @@ -515,13 +508,8 @@ CLIENT *nfs_get_priv_rpcclient(const struct sockaddr *sap, return nfs_get_localclient(sap, salen, program, version, timeout); case AF_INET: - if (sin->sin_port == 0) { - rpc_createerr.cf_stat = RPC_UNKNOWNADDR; - return NULL; - } - break; case AF_INET6: - if (sin6->sin6_port == 0) { + if (nfs_get_port(sap) == 0) { rpc_createerr.cf_stat = RPC_UNKNOWNADDR; return NULL; }