1 /* 2 * Copyright (c) 1995 - 2001 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.13 2001/06/09 01:35:04 joda 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_SRV 54 #define T_SRV 33 55 #endif 56 #ifndef T_NAPTR 57 #define T_NAPTR 35 58 #endif 59 #ifndef T_CERT 60 #define T_CERT 37 61 #endif 62 63 struct dns_query{ 64 char *domain; 65 unsigned type; 66 unsigned class; 67 }; 68 69 struct mx_record{ 70 unsigned preference; 71 char domain[1]; 72 }; 73 74 struct srv_record{ 75 unsigned priority; 76 unsigned weight; 77 unsigned port; 78 char target[1]; 79 }; 80 81 struct key_record { 82 unsigned flags; 83 unsigned protocol; 84 unsigned algorithm; 85 size_t key_len; 86 u_char key_data[1]; 87 }; 88 89 struct sig_record { 90 unsigned type; 91 unsigned algorithm; 92 unsigned labels; 93 unsigned orig_ttl; 94 unsigned sig_expiration; 95 unsigned sig_inception; 96 unsigned key_tag; 97 char *signer; 98 unsigned sig_len; 99 char sig_data[1]; /* also includes signer */ 100 }; 101 102 struct cert_record { 103 unsigned type; 104 unsigned tag; 105 unsigned algorithm; 106 size_t cert_len; 107 u_char cert_data[1]; 108 }; 109 110 struct resource_record{ 111 char *domain; 112 unsigned type; 113 unsigned class; 114 unsigned ttl; 115 unsigned size; 116 union { 117 void *data; 118 struct mx_record *mx; 119 struct mx_record *afsdb; /* mx and afsdb are identical */ 120 struct srv_record *srv; 121 struct in_addr *a; 122 char *txt; 123 struct key_record *key; 124 struct cert_record *cert; 125 struct sig_record *sig; 126 }u; 127 struct resource_record *next; 128 }; 129 130 #ifndef T_A /* XXX if <arpa/nameser.h> isn't included */ 131 typedef int HEADER; /* will never be used */ 132 #endif 133 134 struct dns_reply{ 135 HEADER h; 136 struct dns_query q; 137 struct resource_record *head; 138 }; 139 140 141 struct dns_reply* dns_lookup(const char *, const char *); 142 void dns_free_data(struct dns_reply *); 143 int dns_string_to_type(const char *name); 144 const char *dns_type_to_string(int type); 145 void dns_srv_order(struct dns_reply*); 146 147 #endif /* __RESOLVE_H__ */ 148