glibc/sunrpc
Florian Weimer 5c6e674735 sunrpc: Always obtain AF_INET addresses from NSS [BZ #20964]
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;
}
2016-12-27 16:44:15 +01:00
..
rpc Installed-header hygiene (BZ#20366): obsolete BSD u_* types. 2016-09-23 08:43:56 -04:00
rpcsvc Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
auth_des.c Add #include <stdint.h> for uint[32|64]_t usage (except installed headers). 2013-05-16 11:32:54 -05:00
auth_none.c Move bits/libc-lock.h and bits/libc-lockP.h out of bits/ (bug 14912). 2015-09-08 21:11:03 +00:00
auth_unix.c
authdes_prot.c
authuxprot.c
bindrsvprt.c Move bits/libc-lock.h and bits/libc-lockP.h out of bits/ (bug 14912). 2015-09-08 21:11:03 +00:00
bug20790.x Fix rpcgen buffer overrun (bug 20790). 2016-11-08 23:44:51 +00:00
clnt_gen.c sunrpc: Always obtain AF_INET addresses from NSS [BZ #20964] 2016-12-27 16:44:15 +01:00
clnt_perr.c
clnt_raw.c Convert 69 more function definitions to prototype style (line wrap cases). 2015-10-19 21:23:47 +00:00
clnt_simp.c sunrpc: Always obtain AF_INET addresses from NSS [BZ #20964] 2016-12-27 16:44:15 +01:00
clnt_tcp.c Convert 69 more function definitions to prototype style (line wrap cases). 2015-10-19 21:23:47 +00:00
clnt_udp.c CVE-2016-4429: sunrpc: Do not use alloca in clntudp_call [BZ #20112] 2016-05-23 20:18:34 +02:00
clnt_unix.c Convert 69 more function definitions to prototype style (line wrap cases). 2015-10-19 21:23:47 +00:00
create_xid.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
des_crypt.c
des_impl.c
des_soft.c
etc.rpc * sunrpc/etc.rpc (fedfs_admin): Add entry. 2012-12-05 19:45:23 -07:00
get_myaddr.c
getrpcbyname_r.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getrpcbyname.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getrpcbynumber_r.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getrpcbynumber.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getrpcent_r.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getrpcent.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getrpcport.c sunrpc: Always obtain AF_INET addresses from NSS [BZ #20964] 2016-12-27 16:44:15 +01:00
key_call.c sunrpc: In key_call_keyenvoy, use int status instead of union wait 2016-03-08 10:04:24 +01:00
key_prot.c
Makefile sunrpc: Always obtain AF_INET addresses from NSS [BZ #20964] 2016-12-27 16:44:15 +01:00
netname.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
openchild.c
pm_getmaps.c
pm_getport.c Convert miscellaneous function definitions to prototype style. 2015-10-20 21:27:22 +00:00
pmap_clnt.c
pmap_prot2.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
pmap_prot.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
pmap_rmt.c Convert a few more function definitions to prototype style. 2015-10-21 11:57:23 +00:00
proto.h
publickey.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
rpc_clntout.c
rpc_cmsg.c
rpc_common.c
rpc_cout.c
rpc_dtable.c
rpc_gethostbyname.c sunrpc: Always obtain AF_INET addresses from NSS [BZ #20964] 2016-12-27 16:44:15 +01:00
rpc_hout.c
rpc_main.c Document rpcgen -5. Fixes bug 15825 2013-10-21 10:02:31 +02:00
rpc_parse.c Fix rpcgen buffer overrun (bug 20790). 2016-11-08 23:44:51 +00:00
rpc_parse.h
rpc_prot.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
rpc_sample.c
rpc_scan.c
rpc_scan.h
rpc_svcout.c
rpc_tblout.c
rpc_thread.c sunrpc: Rewrite with explicit TLS access using __thread 2015-10-17 12:07:04 +02:00
rpc_util.c
rpc_util.h
rpcgen.c
rtime.c Add #include <stdint.h> for uint[32|64]_t usage (except installed headers). 2013-05-16 11:32:54 -05:00
svc_auth.c
svc_authux.c
svc_raw.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
svc_run.c
svc_simple.c
svc_tcp.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
svc_udp.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
svc_unix.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
svc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
svcauth_des.c Add #include <stdint.h> for uint[32|64]_t usage (except installed headers). 2013-05-16 11:32:54 -05:00
test-rpcent.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
thrsvc.c
tst-getmyaddr.c
tst-xdrmem2.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-xdrmem.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
Versions Exclude rpcent functions and NSS backends for rpc, key when excluding sunrpc. 2015-02-06 10:43:19 -08:00
xcrypt.c
xdr_array.c Convert miscellaneous function definitions to prototype style. 2015-10-20 21:27:22 +00:00
xdr_float.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
xdr_intXX_t.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
xdr_mem.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
xdr_rec.c Add #include <stdint.h> for uint[32|64]_t usage (except installed headers). 2013-05-16 11:32:54 -05:00
xdr_ref.c Convert miscellaneous function definitions to prototype style. 2015-10-20 21:27:22 +00:00
xdr_sizeof.c
xdr_stdio.c
xdr.c Convert miscellaneous function definitions to prototype style. 2015-10-20 21:27:22 +00:00