Blame resolv/tst-resolv-trailing.c

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