1 /* 2 * Copyright (c) 1995 - 2002 Kungliga Tekniska H�gskolan 3 * (Royal Institute of Technology, Stockholm, Sweden). 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * 3. Neither the name of the Institute nor the names of its contributors 18 * may be used to endorse or promote products derived from this software 19 * without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 */ 33 34 /* $Id: resolve.h,v 1.15 2002/08/26 13:30:16 assar Exp $ */ 35 36 #ifndef __RESOLVE_H__ 37 #define __RESOLVE_H__ 38 39 /* We use these, but they are not always present in <arpa/nameser.h> */ 40 41 #ifndef T_TXT 42 #define T_TXT 16 43 #endif 44 #ifndef T_AFSDB 45 #define T_AFSDB 18 46 #endif 47 #ifndef T_SIG 48 #define T_SIG 24 49 #endif 50 #ifndef T_KEY 51 #define T_KEY 25 52 #endif 53 #ifndef T_AAAA 54 #define T_AAAA 28 55 #endif 56 #ifndef T_SRV 57 #define T_SRV 33 58 #endif 59 #ifndef T_NAPTR 60 #define T_NAPTR 35 61 #endif 62 #ifndef T_CERT 63 #define T_CERT 37 64 #endif 65 66 #define dns_query rk_dns_query 67 #define mx_record rk_mx_record 68 #define srv_record rk_srv_record 69 #define key_record rk_key_record 70 #define sig_record rk_sig_record 71 #define cert_record rk_cert_record 72 #define resource_record rk_resource_record 73 #define dns_reply rk_dns_reply 74 75 #define dns_lookup rk_dns_lookup 76 #define dns_free_data rk_dns_free_data 77 #define dns_string_to_type rk_dns_string_to_type 78 #define dns_type_to_string rk_dns_type_to_string 79 #define dns_srv_order rk_dns_srv_order 80 81 struct dns_query{ 82 char *domain; 83 unsigned type; 84 unsigned class; 85 }; 86 87 struct mx_record{ 88 unsigned preference; 89 char domain[1]; 90 }; 91 92 struct srv_record{ 93 unsigned priority; 94 unsigned weight; 95 unsigned port; 96 char target[1]; 97 }; 98 99 struct key_record { 100 unsigned flags; 101 unsigned protocol; 102 unsigned algorithm; 103 size_t key_len; 104 u_char key_data[1]; 105 }; 106 107 struct sig_record { 108 unsigned type; 109 unsigned algorithm; 110 unsigned labels; 111 unsigned orig_ttl; 112 unsigned sig_expiration; 113 unsigned sig_inception; 114 unsigned key_tag; 115 char *signer; 116 unsigned sig_len; 117 char sig_data[1]; /* also includes signer */ 118 }; 119 120 struct cert_record { 121 unsigned type; 122 unsigned tag; 123 unsigned algorithm; 124 size_t cert_len; 125 u_char cert_data[1]; 126 }; 127 128 struct resource_record{ 129 char *domain; 130 unsigned type; 131 unsigned class; 132 unsigned ttl; 133 unsigned size; 134 union { 135 void *data; 136 struct mx_record *mx; 137 struct mx_record *afsdb; /* mx and afsdb are identical */ 138 struct srv_record *srv; 139 struct in_addr *a; 140 char *txt; 141 struct key_record *key; 142 struct cert_record *cert; 143 struct sig_record *sig; 144 }u; 145 struct resource_record *next; 146 }; 147 148 #ifndef T_A /* XXX if <arpa/nameser.h> isn't included */ 149 typedef int HEADER; /* will never be used */ 150 #endif 151 152 struct dns_reply{ 153 HEADER h; 154 struct dns_query q; 155 struct resource_record *head; 156 }; 157 158 159 struct dns_reply* dns_lookup(const char *, const char *); 160 void dns_free_data(struct dns_reply *); 161 int dns_string_to_type(const char *name); 162 const char *dns_type_to_string(int type); 163 void dns_srv_order(struct dns_reply*); 164 165 #endif /* __RESOLVE_H__ */ 166