Blame resolv/tst-resolv-trailing.c

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