| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | $Id$--- fetchmail-6.3.9.orig/mxget.c	2007-06-10 10:32:47.000000000 +0200+++ fetchmail-6.3.9/mxget.c	2009-06-12 22:24:29.000000000 +0200@@ -56,6 +56,123 @@ /* minimum possible size of MX record in packet */ #define MIN_MX_SIZE	8	/* corresp to "a.com 0" w/ terminating space */ +/* from bind9 package: */+/*+Copyright (C) 2004-2007  Internet Systems Consortium, Inc. ("ISC")+Copyright (C) 1996-2003  Internet Software Consortium.++Permission to use, copy, modify, and distribute this software for any+purpose with or without fee is hereby granted, provided that the above+copyright notice and this permission notice appear in all copies.++THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY+AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR+PERFORMANCE OF THIS SOFTWARE.++$Id: COPYRIGHT,v 1.9.18.3 2007/01/08 02:41:59 marka Exp $++Portions Copyright (C) 1996-2001  Nominum, Inc.++Permission to use, copy, modify, and distribute this software for any+purpose with or without fee is hereby granted, provided that the above+copyright notice and this permission notice appear in all copies.++THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.+*/+#define NS_TYPE_ELT                     0x40 /*%< EDNS0 extended label +type +*/+#define NS_CMPRSFLGS     0xc0    /*%< Flag bits indicating name compression. */+#define DNS_LABELTYPE_BITSTRING               0x41+static int+labellen(const u_char *lp)+{+        int bitlen;+        u_char l = *lp;++        if ((l & NS_CMPRSFLGS) == NS_CMPRSFLGS) {+                /* should be avoided by the caller */+                return(-1);+        }++        if ((l & NS_CMPRSFLGS) == NS_TYPE_ELT) {+                if (l == DNS_LABELTYPE_BITSTRING) {+                        if ((bitlen = *(lp + 1)) == 0)+                                bitlen = 256;+                        return((bitlen + 7 ) / 8 + 1);+                }+                return(-1);     /*%< unknwon ELT */+        }+        return(l);+}+/*%+ *      Advance *ptrptr to skip over the compressed name it points at.+ *+ * return:+ *\li   0 on success, -1 (with errno set) on failure.+ */+int+ns_name_skip(const u_char **ptrptr, const u_char *eom)+{+        const u_char *cp;+        u_int n;+        int l;++        cp = *ptrptr;+        while (cp < eom && (n = *cp++) != 0) {+                /* Check for indirection. */+                switch (n & NS_CMPRSFLGS) {+                case 0:                 /*%< normal case, n == len */+                        cp += n;+                        continue;+                case NS_TYPE_ELT: /*%< EDNS0 extended label */+                        if ((l = labellen(cp - 1)) < 0) {+//                                errno = EMSGSIZE; /*%< XXX */+                                return(-1);+                        }+                        cp += l;+                        continue;+                case NS_CMPRSFLGS:      /*%< indirection */+                        cp++;+                        break;+                default:                /*%< illegal type */+//                        errno = EMSGSIZE;+                        return (-1);+                }+                break;+        }+        if (cp > eom) {+//                errno = EMSGSIZE;+                return (-1);+        }+        *ptrptr = cp;+        return (0);+}++/*%+ * Skip over a compressed domain name. Return the size or -1.+ */+int+dn_skipname(const u_char *ptr, const u_char *eom) {+        const u_char *saveptr = ptr;++        if (ns_name_skip(&ptr, eom) == -1)+                return (-1);+        return (ptr - saveptr);+}+/* End from Bind9 package */++ struct mxentry *getmxrecords(const char *name) /* get MX records for given host */ {
 |