X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fshowmount%2Fshowmount.c;h=17f7d87102b429896b1ef936daafa065e136e7f4;hp=7f5ad3aa54fc79138f0c7cf92c0ea6d4c52fa72b;hb=f7020bd5d3ffca280690c6beba5fecdeb4d305f7;hpb=1c96846ba3adeb59a61e0cf33cf4c94c0678853f diff --git a/utils/showmount/showmount.c b/utils/showmount/showmount.c index 7f5ad3a..17f7d87 100644 --- a/utils/showmount/showmount.c +++ b/utils/showmount/showmount.c @@ -50,6 +50,13 @@ static int aflag = 0; static int dflag = 0; static int eflag = 0; +static const char *nfs_sm_pgmtbl[] = { + "showmount", + "mount", + "mountd", + NULL, +}; + static struct option longopts[] = { { "all", 0, 0, 'a' }, @@ -78,6 +85,33 @@ static void usage(FILE *fp, int n) exit(n); } +#ifdef HAVE_CLNT_CREATE + +/* + * Generate an RPC client handle connected to the mountd service + * at @hostname, or die trying. + * + * Supports both AF_INET and AF_INET6 server addresses. + */ +static CLIENT *nfs_get_mount_client(const char *hostname) +{ + rpcprog_t program = nfs_getrpcbyname(MOUNTPROG, nfs_sm_pgmtbl); + CLIENT *client; + + client = clnt_create(hostname, program, MOUNTVERS, "tcp"); + if (client) + return client; + + client = clnt_create(hostname, program, MOUNTVERS, "udp"); + if (client) + return client; + + clnt_pcreateerror("clnt_create"); + exit(1); +} + +#else /* HAVE_CLNT_CREATE */ + /* * Perform a non-blocking connect on the socket fd. * @@ -213,6 +247,8 @@ static CLIENT *nfs_get_mount_client(const char *hostname) return mclient; } +#endif /* HAVE_CLNT_CREATE */ + int main(int argc, char **argv) { char hostname_buf[MAXHOSTLEN];