API: Reject unknown flags
[adns] / src / adns.h
index d0a7a8d..4cabc4a 100644 (file)
@@ -5,10 +5,10 @@
 /*
  *
  *  This file is
- *    Copyright (C) 1997-2000,2003,2006 Ian Jackson
+ *    Copyright (C) 1997-2000,2003,2006,2014 Ian Jackson
  *
  *  It is part of adns, which is
- *    Copyright (C) 1997-2000,2003,2006 Ian Jackson
+ *    Copyright (C) 1997-2000,2003,2006,2014 Ian Jackson
  *    Copyright (C) 1999-2000,2003,2006 Tony Finch
  *    Copyright (C) 1991 Massachusetts Institute of Technology
  *
@@ -50,8 +50,6 @@
  *  or the GNU Library General Public License, as appropriate, along
  *  with this program; if not, write to the Free Software Foundation.
  *
- *
- *  $Id$
  */
 
 #ifndef ADNS_H_INCLUDED
@@ -110,13 +108,14 @@ typedef enum { /* In general, or together the desired flags: */
 
  adns_if_permit_ipv4= 0x0400,/* allow _addr queries to return IPv4 addresses  */
  adns_if_permit_ipv6= 0x0800,/* allow _addr queries to return IPv6 addresses */
- adns_if_afmask=      0x0c00
+ adns_if_afmask=      0x0c00,
    /* These are policy flags, and overridden by the adns_af:... option in
     * resolv.conf.  If the adns_qf_want_... query flags are incompatible with
     * these settings (in the sense that no address families are permitted at
     * all) then the query flags take precedence; otherwise only records which
     * satisfy all of the stated requirements are allowed.
     */
+ adns__if_sizeforce= 0x7fff,
 } adns_initflags;
 
 typedef enum { /* In general, or together the desired flags: */
@@ -129,6 +128,7 @@ typedef enum { /* In general, or together the desired flags: */
  adns_qf_quoteok_anshost=0x00000040,/*  ... in things supposedly hostnames */
  adns_qf_quotefail_cname=0x00000080,/* refuse if quote-req chars in CNAME we go via */
  adns_qf_cname_loose=    0x00000100,/* allow refs to CNAMEs - without, get _s_cname */
+ adns_qf_cname_strict=   0x00010000,/* forbid CNAME refs (default, currently) */
  adns_qf_cname_forbid=   0x00000200,/* don't follow CNAMEs, instead give _s_cname */
 
  adns_qf_want_ipv4=     0x00000400,/* try to return IPv4 addresses */
@@ -145,7 +145,8 @@ typedef enum { /* In general, or together the desired flags: */
  adns_qf_addrlit_scope_numeric=0x00004000,/* %<scope> may only be numeric */
  adns_qf_addrlit_ipv4_quadonly=0x00008000,/* reject non-dotted-quad ipv4 */
 
- adns__qf_internalmask=  0x0ff00000
+ adns__qf_internalmask=  0x0ff00000,
+ adns__qf_sizeforce=     0x7fffffff
 } adns_queryflags;
 
 typedef enum {
@@ -193,7 +194,7 @@ typedef enum {
  adns_r_soa_raw=          6,
  adns_r_soa=                 adns_r_soa_raw|adns__qtf_mail822, 
                     
- adns_r_ptr_raw=         12, /* do not mind PTR with wrong or missing A */
+ adns_r_ptr_raw=         12, /* do not mind PTR with wrong or missing addr */
  adns_r_ptr=                 adns_r_ptr_raw|adns__qtf_deref,
                     
  adns_r_hinfo=           13,  
@@ -214,7 +215,9 @@ typedef enum {
  adns_r_srv_raw=         33,
  adns_r_srv=                 adns_r_srv_raw|adns__qtf_deref,
                     
- adns_r_addr=                adns_r_a|adns__qtf_deref
+ adns_r_addr=                adns_r_a|adns__qtf_deref,
+
+ adns__rrt_sizeforce= 0x7fffffff,
  
 } adns_rrtype;
 
@@ -315,8 +318,8 @@ typedef enum {
  adns_s_max_tempfail= 99,
 
  /* remote configuration errors */
- adns_s_inconsistent, /* PTR gives domain whose A does not exist and match */
- adns_s_prohibitedcname, /* CNAME, but eg A expected (not if _qf_loosecname) */
+ adns_s_inconsistent, /* PTR gives domain whose addr is missing or mismatch */
+ adns_s_prohibitedcname, /* CNAME, but eg A expected (not if _qf_cname_loose) */
  adns_s_answerdomaininvalid,
  adns_s_answerdomaintoolong,
  adns_s_invaliddata,
@@ -706,8 +709,7 @@ int adns_addr2text(const struct sockaddr *sa, adns_queryflags flags,
    * port is always in host byte order and is simply copied to and
    * from the appropriate sockaddr field (byteswapped as necessary).
    *
-   * The only flags supported are adns_qf_addrlit_...; others are
-   * ignored.
+   * The only flags supported are adns_qf_addrlit_...
    *
    * Error return values are:
    *
@@ -730,6 +732,8 @@ int adns_addr2text(const struct sockaddr *sa, adns_queryflags flags,
    *
    *  EAFNOSUPPORT   sa->sa_family is not supported (addr2text only).
    *
+   *  ENOSYS    Unsupported flags set.
+   *
    * Only if neither adns_qf_addrlit_scope_forbid nor
    * adns_qf_addrlit_scope_numeric are set:
    *