Blame resolv/resolv-internal.h

Packit 6c4009
/* libresolv interfaces for internal use across glibc.
Packit 6c4009
   Copyright (C) 2016-2018 Free Software Foundation, Inc.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public
Packit 6c4009
   License as published by the Free Software Foundation; either
Packit 6c4009
   version 2.1 of the License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library; if not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#ifndef _RESOLV_INTERNAL_H
Packit 6c4009
#define _RESOLV_INTERNAL_H 1
Packit 6c4009
Packit 6c4009
#include <resolv.h>
Packit 6c4009
#include <stdbool.h>
Packit 6c4009
Packit 6c4009
/* Resolver flags.  Used for _flags in struct __res_state.  */
Packit 6c4009
#define RES_F_VC        0x00000001 /* Socket is TCP.  */
Packit 6c4009
#define RES_F_CONN      0x00000002 /* Socket is connected.  */
Packit 6c4009
#define RES_F_EDNS0ERR  0x00000004 /* EDNS0 caused errors.  */
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Internal version of RES_USE_INET6 which does not trigger a
Packit 6c4009
   deprecation warning.  */
Packit 6c4009
#define DEPRECATED_RES_USE_INET6 0x00002000
Packit 6c4009
Packit 6c4009
static inline bool
Packit 6c4009
res_use_inet6 (void)
Packit 6c4009
{
Packit 6c4009
  return _res.options & DEPRECATED_RES_USE_INET6;
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
enum
Packit 6c4009
  {
Packit 6c4009
    /* The advertized EDNS buffer size.  The value 1200 is derived
Packit 6c4009
       from the IPv6 minimum MTU (1280 bytes) minus some arbitrary
Packit 6c4009
       space for tunneling overhead.  If the DNS server does not react
Packit 6c4009
       to ICMP Fragmentation Needed But DF Set messages, this should
Packit 6c4009
       avoid all UDP fragments on current networks.  Avoiding UDP
Packit 6c4009
       fragments is desirable because it prevents fragmentation-based
Packit 6c4009
       spoofing attacks because the randomness in a DNS packet is
Packit 6c4009
       concentrated in the first fragment (with the headers) and does
Packit 6c4009
       not protect subsequent fragments.  */
Packit 6c4009
    RESOLV_EDNS_BUFFER_SIZE = 1200,
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
struct resolv_context;
Packit 6c4009
Packit 6c4009
/* Internal function for implementing res_nmkquery and res_mkquery.
Packit 6c4009
   Also used by __res_context_query.  */
Packit 6c4009
int __res_context_mkquery (struct resolv_context *, int op, const char *dname,
Packit 6c4009
                           int class, int type, const unsigned char *data,
Packit 6c4009
                           unsigned char *buf, int buflen) attribute_hidden;
Packit 6c4009
Packit 6c4009
/* Main resolver query function for use within glibc.  */
Packit 6c4009
int __res_context_search (struct resolv_context *, const char *, int, int,
Packit 6c4009
                          unsigned char *, int, unsigned char **,
Packit 6c4009
                          unsigned char **, int *, int *, int *);
Packit 6c4009
libresolv_hidden_proto (__res_context_search)
Packit 6c4009
Packit 6c4009
/* Main resolver query function for use within glibc.  */
Packit 6c4009
int __res_context_query (struct resolv_context *, const char *, int, int,
Packit 6c4009
                         unsigned char *, int, unsigned char **,
Packit 6c4009
                         unsigned char **, int *, int *, int *);
Packit 6c4009
libresolv_hidden_proto (__res_context_query)
Packit 6c4009
Packit 6c4009
/* Internal function used to implement the query and search
Packit 6c4009
   functions.  */
Packit 6c4009
int __res_context_send (struct resolv_context *, const unsigned char *, int,
Packit 6c4009
                        const unsigned char *, int, unsigned char *,
Packit 6c4009
                        int, unsigned char **, unsigned char **,
Packit 6c4009
                        int *, int *, int *) attribute_hidden;
Packit 6c4009
Packit 6c4009
/* Internal function similar to res_hostalias.  */
Packit 6c4009
const char *__res_context_hostalias (struct resolv_context *,
Packit 6c4009
                                     const char *, char *, size_t);
Packit 6c4009
libresolv_hidden_proto (__res_context_hostalias);
Packit 6c4009
Packit 6c4009
/* Add an OPT record to a DNS query.  */
Packit 6c4009
int __res_nopt (struct resolv_context *, int n0,
Packit 6c4009
                unsigned char *buf, int buflen, int anslen) attribute_hidden;
Packit 6c4009
Packit 6c4009
/* Convert from presentation format (which usually means ASCII
Packit 6c4009
   printable) to network format (which is usually some kind of binary
Packit 6c4009
   format).  The input is in the range [SRC, SRC + SRCLEN).  The
Packit 6c4009
   output is written to DST (which has to be 4 or 16 bytes long,
Packit 6c4009
   depending on AF).  Return 0 for invalid input, 1 for success, -1
Packit 6c4009
   for an invalid address family.  */
Packit 6c4009
int __inet_pton_length (int af, const char *src, size_t srclen, void *);
Packit 6c4009
libc_hidden_proto (__inet_pton_length)
Packit 6c4009
Packit 6c4009
/* Called as part of the thread shutdown sequence.  */
Packit 6c4009
void __res_thread_freeres (void) attribute_hidden;
Packit 6c4009
Packit Bot 511ab2
/* The Linux kernel does not enable all ICMP messages on a UDP socket
Packit Bot 511ab2
   by default.  A call this function enables full error reporting for
Packit Bot 511ab2
   the socket FD.  FAMILY must be AF_INET or AF_INET6.  Returns 0 on
Packit Bot 511ab2
   success, -1 on failure.  */
Packit Bot 511ab2
int __res_enable_icmp (int family, int fd) attribute_hidden;
Packit Bot 511ab2
Packit 6c4009
#endif  /* _RESOLV_INTERNAL_H */