mirror of git://sourceware.org/git/glibc.git
The new __libc_rpc_gethostbyname function calls gethostbyname2_r
with an AF_INET argument and is therefore not affected by the
RES_USE_INET6 flag.
Validated with the following test program, with and without
RES_OPTIONS=inet6, against a NFS server. (Link with -lrpcsvc.)
#include <rpc/clnt.h>
#include <rpcsvc/mount.h>
#include <stdio.h>
#include <string.h>
static void
usage (char **argv)
{
printf ("usage:\n"
" %1$s HOST getrpcport\n"
" %1$s HOST callrpc\n"
" %1$s HOST clnt_create\n",
argv[0]);
}
static void
dump_exports (struct exportnode *exports)
{
while (exports != NULL)
{
printf ("%s\n", exports->ex_dir);
exports = exports->ex_next;
}
}
int
main (int argc, char **argv)
{
if (argc != 3)
{
usage (argv);
return 1;
}
const char *host = argv[1];
const char *command = argv[2];
if (strcmp (command, "getrpcport") == 0)
{
int port = getrpcport (host, MOUNTPROG, MOUNTVERS, IPPROTO_UDP);
printf ("getrpcport: %d\n", port);
}
else if (strcmp (command, "callrpc") == 0)
{
struct exportnode *exports = NULL;
int ret = callrpc (host, MOUNTPROG, MOUNTVERS, MOUNTPROC_EXPORT,
(xdrproc_t) xdr_void, NULL,
(xdrproc_t) xdr_exports, (char *)&exports);
if (ret != 0)
{
clnt_perrno (ret);
puts ("");
return 1;
}
dump_exports (exports);
}
else if (strcmp (command, "clnt_create") == 0)
{
CLIENT *client = clnt_create
(host, MOUNTPROG, MOUNTVERS, "udp");
if (client == NULL)
{
printf ("error: clnt_create failed\n");
return 1;
}
struct exportnode *exports = NULL;
int ret = CLNT_CALL (client, MOUNTPROC_EXPORT,
(xdrproc_t) xdr_void, NULL,
(xdrproc_t) xdr_exports, (char *)&exports,
((struct timeval) {15, 0}));
if (ret != 0)
{
clnt_perrno (ret);
puts ("");
return 1;
}
dump_exports (exports);
}
else
{
usage (argv);
return 1;
}
return 0;
}
|
||
|---|---|---|
| .. | ||
| rpc | ||
| rpcsvc | ||
| Makefile | ||
| Versions | ||
| auth_des.c | ||
| auth_none.c | ||
| auth_unix.c | ||
| authdes_prot.c | ||
| authuxprot.c | ||
| bindrsvprt.c | ||
| bug20790.x | ||
| clnt_gen.c | ||
| clnt_perr.c | ||
| clnt_raw.c | ||
| clnt_simp.c | ||
| clnt_tcp.c | ||
| clnt_udp.c | ||
| clnt_unix.c | ||
| create_xid.c | ||
| des_crypt.c | ||
| des_impl.c | ||
| des_soft.c | ||
| etc.rpc | ||
| get_myaddr.c | ||
| getrpcbyname.c | ||
| getrpcbyname_r.c | ||
| getrpcbynumber.c | ||
| getrpcbynumber_r.c | ||
| getrpcent.c | ||
| getrpcent_r.c | ||
| getrpcport.c | ||
| key_call.c | ||
| key_prot.c | ||
| netname.c | ||
| openchild.c | ||
| pm_getmaps.c | ||
| pm_getport.c | ||
| pmap_clnt.c | ||
| pmap_prot.c | ||
| pmap_prot2.c | ||
| pmap_rmt.c | ||
| proto.h | ||
| publickey.c | ||
| rpc_clntout.c | ||
| rpc_cmsg.c | ||
| rpc_common.c | ||
| rpc_cout.c | ||
| rpc_dtable.c | ||
| rpc_gethostbyname.c | ||
| rpc_hout.c | ||
| rpc_main.c | ||
| rpc_parse.c | ||
| rpc_parse.h | ||
| rpc_prot.c | ||
| rpc_sample.c | ||
| rpc_scan.c | ||
| rpc_scan.h | ||
| rpc_svcout.c | ||
| rpc_tblout.c | ||
| rpc_thread.c | ||
| rpc_util.c | ||
| rpc_util.h | ||
| rpcgen.c | ||
| rtime.c | ||
| svc.c | ||
| svc_auth.c | ||
| svc_authux.c | ||
| svc_raw.c | ||
| svc_run.c | ||
| svc_simple.c | ||
| svc_tcp.c | ||
| svc_udp.c | ||
| svc_unix.c | ||
| svcauth_des.c | ||
| test-rpcent.c | ||
| thrsvc.c | ||
| tst-getmyaddr.c | ||
| tst-xdrmem.c | ||
| tst-xdrmem2.c | ||
| xcrypt.c | ||
| xdr.c | ||
| xdr_array.c | ||
| xdr_float.c | ||
| xdr_intXX_t.c | ||
| xdr_mem.c | ||
| xdr_rec.c | ||
| xdr_ref.c | ||
| xdr_sizeof.c | ||
| xdr_stdio.c | ||