Blame resolv/tst-resolv-trailing.c

Packit Service f7a268
/* Test name resolution behavior with trailing characters.
Packit Service f7a268
   Copyright (C) 2019 Free Software Foundation, Inc.
Packit Service f7a268
   This file is part of the GNU C Library.
Packit Service f7a268
Packit Service f7a268
   The GNU C Library is free software; you can redistribute it and/or
Packit Service f7a268
   modify it under the terms of the GNU Lesser General Public
Packit Service f7a268
   License as published by the Free Software Foundation; either
Packit Service f7a268
   version 2.1 of the License, or (at your option) any later version.
Packit Service f7a268
Packit Service f7a268
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service f7a268
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service f7a268
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service f7a268
   Lesser General Public License for more details.
Packit Service f7a268
Packit Service f7a268
   You should have received a copy of the GNU Lesser General Public
Packit Service f7a268
   License along with the GNU C Library; if not, see
Packit Service f7a268
   <http://www.gnu.org/licenses/>.  */
Packit Service f7a268
Packit Service f7a268
#include <array_length.h>
Packit Service f7a268
#include <netdb.h>
Packit Service f7a268
#include <support/check.h>
Packit Service f7a268
#include <support/check_nss.h>
Packit Service f7a268
#include <support/resolv_test.h>
Packit Service f7a268
#include <support/support.h>
Packit Service f7a268
Packit Service f7a268
static void
Packit Service f7a268
response (const struct resolv_response_context *ctx,
Packit Service f7a268
          struct resolv_response_builder *b,
Packit Service f7a268
          const char *qname, uint16_t qclass, uint16_t qtype)
Packit Service f7a268
{
Packit Service f7a268
  /* The tests are not supposed send any DNS queries.  */
Packit Service f7a268
  FAIL_EXIT1 ("unexpected DNS query for %s/%d/%d", qname, qclass, qtype);
Packit Service f7a268
}
Packit Service f7a268
Packit Service f7a268
static int
Packit Service f7a268
do_test (void)
Packit Service f7a268
{
Packit Service f7a268
  struct resolv_test *aux = resolv_test_start
Packit Service f7a268
    ((struct resolv_redirect_config)
Packit Service f7a268
     {
Packit Service f7a268
       .response_callback = response,
Packit Service f7a268
     });
Packit Service f7a268
Packit Service f7a268
  static const char *const queries[] =
Packit Service f7a268
    {
Packit Service f7a268
     "192.0.2.1 ",
Packit Service f7a268
     "192.0.2.2\t",
Packit Service f7a268
     "192.0.2.3\n",
Packit Service f7a268
     "192.0.2.4 X",
Packit Service f7a268
     "192.0.2.5\tY",
Packit Service f7a268
     "192.0.2.6\nZ",
Packit Service f7a268
     "192.0.2. ",
Packit Service f7a268
     "192.0.2.\t",
Packit Service f7a268
     "192.0.2.\n",
Packit Service f7a268
     "192.0.2. X",
Packit Service f7a268
     "192.0.2.\tY",
Packit Service f7a268
     "192.0.2.\nZ",
Packit Service f7a268
     "2001:db8::1 ",
Packit Service f7a268
     "2001:db8::2\t",
Packit Service f7a268
     "2001:db8::3\n",
Packit Service f7a268
     "2001:db8::4 X",
Packit Service f7a268
     "2001:db8::5\tY",
Packit Service f7a268
     "2001:db8::6\nZ",
Packit Service f7a268
    };
Packit Service f7a268
  for (size_t query_idx = 0; query_idx < array_length (queries); ++query_idx)
Packit Service f7a268
    {
Packit Service f7a268
      const char *query = queries[query_idx];
Packit Service f7a268
      struct hostent storage;
Packit Service f7a268
      char buf[4096];
Packit Service f7a268
      struct hostent *e;
Packit Service f7a268
Packit Service f7a268
      h_errno = 0;
Packit Service f7a268
      TEST_VERIFY (gethostbyname (query) == NULL);
Packit Service f7a268
      TEST_COMPARE (h_errno, HOST_NOT_FOUND);
Packit Service f7a268
Packit Service f7a268
      h_errno = 0;
Packit Service f7a268
      e = NULL;
Packit Service f7a268
      TEST_COMPARE (gethostbyname_r (query, &storage, buf, sizeof (buf),
Packit Service f7a268
                                     &e, &h_errno), 0);
Packit Service f7a268
      TEST_VERIFY (e == NULL);
Packit Service f7a268
      TEST_COMPARE (h_errno, HOST_NOT_FOUND);
Packit Service f7a268
Packit Service f7a268
      h_errno = 0;
Packit Service f7a268
      TEST_VERIFY (gethostbyname2 (query, AF_INET) == NULL);
Packit Service f7a268
      TEST_COMPARE (h_errno, HOST_NOT_FOUND);
Packit Service f7a268
Packit Service f7a268
      h_errno = 0;
Packit Service f7a268
      e = NULL;
Packit Service f7a268
      TEST_COMPARE (gethostbyname2_r (query, AF_INET,
Packit Service f7a268
                                      &storage, buf, sizeof (buf),
Packit Service f7a268
                                     &e, &h_errno), 0);
Packit Service f7a268
      TEST_VERIFY (e == NULL);
Packit Service f7a268
      TEST_COMPARE (h_errno, HOST_NOT_FOUND);
Packit Service f7a268
Packit Service f7a268
      h_errno = 0;
Packit Service f7a268
      TEST_VERIFY (gethostbyname2 (query, AF_INET6) == NULL);
Packit Service f7a268
      TEST_COMPARE (h_errno, HOST_NOT_FOUND);
Packit Service f7a268
Packit Service f7a268
      h_errno = 0;
Packit Service f7a268
      e = NULL;
Packit Service f7a268
      TEST_COMPARE (gethostbyname2_r (query, AF_INET6,
Packit Service f7a268
                                      &storage, buf, sizeof (buf),
Packit Service f7a268
                                     &e, &h_errno), 0);
Packit Service f7a268
      TEST_VERIFY (e == NULL);
Packit Service f7a268
      TEST_COMPARE (h_errno, HOST_NOT_FOUND);
Packit Service f7a268
Packit Service f7a268
      static const int gai_flags[] =
Packit Service f7a268
        {
Packit Service f7a268
         0,
Packit Service f7a268
         AI_ADDRCONFIG,
Packit Service f7a268
         AI_NUMERICHOST,
Packit Service f7a268
         AI_IDN,
Packit Service f7a268
         AI_IDN | AI_NUMERICHOST,
Packit Service f7a268
         AI_V4MAPPED,
Packit Service f7a268
         AI_V4MAPPED | AI_NUMERICHOST,
Packit Service f7a268
        };
Packit Service f7a268
      for (size_t gai_flags_idx; gai_flags_idx < array_length (gai_flags);
Packit Service f7a268
             ++gai_flags_idx)
Packit Service f7a268
        {
Packit Service f7a268
          struct addrinfo hints = { .ai_flags = gai_flags[gai_flags_idx], };
Packit Service f7a268
          struct addrinfo *ai;
Packit Service f7a268
          hints.ai_family = AF_INET;
Packit Service f7a268
          TEST_COMPARE (getaddrinfo (query, "80", &hints, &ai), EAI_NONAME);
Packit Service f7a268
          hints.ai_family = AF_INET6;
Packit Service f7a268
          TEST_COMPARE (getaddrinfo (query, "80", &hints, &ai), EAI_NONAME);
Packit Service f7a268
          hints.ai_family = AF_UNSPEC;
Packit Service f7a268
          TEST_COMPARE (getaddrinfo (query, "80", &hints, &ai), EAI_NONAME);
Packit Service f7a268
        }
Packit Service f7a268
    };
Packit Service f7a268
Packit Service f7a268
  resolv_test_end (aux);
Packit Service f7a268
Packit Service f7a268
  return 0;
Packit Service f7a268
}
Packit Service f7a268
Packit Service f7a268
#include <support/test-driver.c>