diff options
Diffstat (limited to 'src/lib/krb5/os/dnsglue.c')
-rw-r--r-- | src/lib/krb5/os/dnsglue.c | 163 |
1 files changed, 82 insertions, 81 deletions
diff --git a/src/lib/krb5/os/dnsglue.c b/src/lib/krb5/os/dnsglue.c index 55e1cd9124..f07f8211c7 100644 --- a/src/lib/krb5/os/dnsglue.c +++ b/src/lib/krb5/os/dnsglue.c @@ -1,3 +1,4 @@ +/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* * lib/krb5/os/dnsglue.c * @@ -8,7 +9,7 @@ * require a specific license from the United States Government. * It is the responsibility of any person or organization contemplating * export to obtain such a license before exporting. - * + * * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and * distribute this software and its documentation for any purpose and * without fee is hereby granted, provided that the above copyright @@ -22,7 +23,7 @@ * M.I.T. makes no representations about the suitability of * this software for any purpose. It is provided "as is" without express * or implied warranty. - * + * */ #include "autoconf.h" #ifdef KRB5_DNS_LOOKUP @@ -72,7 +73,7 @@ static int initparse(struct krb5int_dns_state *); */ int krb5int_dns_init(struct krb5int_dns_state **dsp, - char *host, int nclass, int ntype) + char *host, int nclass, int ntype) { #if USE_RES_NINIT struct __res_state statbuf; @@ -84,7 +85,7 @@ krb5int_dns_init(struct krb5int_dns_state **dsp, *dsp = ds = malloc(sizeof(*ds)); if (ds == NULL) - return -1; + return -1; ret = -1; ds->nclass = nclass; @@ -106,36 +107,36 @@ krb5int_dns_init(struct krb5int_dns_state **dsp, ret = res_init(); #endif if (ret < 0) - return -1; + return -1; do { - p = (ds->ansp == NULL) - ? malloc(nextincr) : realloc(ds->ansp, nextincr); + p = (ds->ansp == NULL) + ? malloc(nextincr) : realloc(ds->ansp, nextincr); - if (p == NULL) { - ret = -1; - goto errout; - } - ds->ansp = p; - ds->ansmax = nextincr; + if (p == NULL) { + ret = -1; + goto errout; + } + ds->ansp = p; + ds->ansmax = nextincr; #if USE_RES_NINIT - len = res_nsearch(&statbuf, host, ds->nclass, ds->ntype, - ds->ansp, ds->ansmax); + len = res_nsearch(&statbuf, host, ds->nclass, ds->ntype, + ds->ansp, ds->ansmax); #else - len = res_search(host, ds->nclass, ds->ntype, - ds->ansp, ds->ansmax); + len = res_search(host, ds->nclass, ds->ntype, + ds->ansp, ds->ansmax); #endif - if (len > maxincr) { - ret = -1; - goto errout; - } - while (nextincr < len) - nextincr *= 2; - if (len < 0 || nextincr > maxincr) { - ret = -1; - goto errout; - } + if (len > maxincr) { + ret = -1; + goto errout; + } + while (nextincr < len) + nextincr *= 2; + if (len < 0 || nextincr > maxincr) { + ret = -1; + goto errout; + } } while (len > ds->ansmax); ds->anslen = len; @@ -145,7 +146,7 @@ krb5int_dns_init(struct krb5int_dns_state **dsp, ret = initparse(ds); #endif if (ret < 0) - goto errout; + goto errout; ret = 0; @@ -154,10 +155,10 @@ errout: res_ndestroy(&statbuf); #endif if (ret < 0) { - if (ds->ansp != NULL) { - free(ds->ansp); - ds->ansp = NULL; - } + if (ds->ansp != NULL) { + free(ds->ansp); + ds->ansp = NULL; + } } return ret; @@ -172,7 +173,7 @@ errout: */ int krb5int_dns_nextans(struct krb5int_dns_state *ds, - const unsigned char **pp, int *lenp) + const unsigned char **pp, int *lenp) { int len; ns_rr rr; @@ -180,16 +181,16 @@ krb5int_dns_nextans(struct krb5int_dns_state *ds, *pp = NULL; *lenp = 0; while (ds->cur_ans < ns_msg_count(ds->msg, ns_s_an)) { - len = ns_parserr(&ds->msg, ns_s_an, ds->cur_ans, &rr); - if (len < 0) - return -1; - ds->cur_ans++; - if (ds->nclass == ns_rr_class(rr) - && ds->ntype == ns_rr_type(rr)) { - *pp = ns_rr_rdata(rr); - *lenp = ns_rr_rdlen(rr); - return 0; - } + len = ns_parserr(&ds->msg, ns_s_an, ds->cur_ans, &rr); + if (len < 0) + return -1; + ds->cur_ans++; + if (ds->nclass == ns_rr_class(rr) + && ds->ntype == ns_rr_type(rr)) { + *pp = ns_rr_rdata(rr); + *lenp = ns_rr_rdlen(rr); + return 0; + } } return 0; } @@ -199,18 +200,18 @@ krb5int_dns_nextans(struct krb5int_dns_state *ds, * krb5int_dns_expand - wrapper for dn_expand() */ int krb5int_dns_expand(struct krb5int_dns_state *ds, - const unsigned char *p, - char *buf, int len) + const unsigned char *p, + char *buf, int len) { #if HAVE_NS_NAME_UNCOMPRESS return ns_name_uncompress(ds->ansp, - (unsigned char *)ds->ansp + ds->anslen, - p, buf, (size_t)len); + (unsigned char *)ds->ansp + ds->anslen, + p, buf, (size_t)len); #else return dn_expand(ds->ansp, - (unsigned char *)ds->ansp + ds->anslen, - p, buf, len); + (unsigned char *)ds->ansp + ds->anslen, + p, buf, len); #endif } @@ -221,9 +222,9 @@ void krb5int_dns_fini(struct krb5int_dns_state *ds) { if (ds == NULL) - return; + return; if (ds->ansp != NULL) - free(ds->ansp); + free(ds->ansp); free(ds); } @@ -251,7 +252,7 @@ initparse(struct krb5int_dns_state *ds) #endif if (ds->anslen < sizeof(HEADER)) - return -1; + return -1; hdr = (HEADER *)ds->ansp; p = ds->ansp; @@ -264,14 +265,14 @@ initparse(struct krb5int_dns_state *ds) */ while (nqueries--) { #if HAVE_DN_SKIPNAME - len = dn_skipname(p, (unsigned char *)ds->ansp + ds->anslen); + len = dn_skipname(p, (unsigned char *)ds->ansp + ds->anslen); #else - len = dn_expand(ds->ansp, (unsigned char *)ds->ansp + ds->anslen, - p, host, sizeof(host)); + len = dn_expand(ds->ansp, (unsigned char *)ds->ansp + ds->anslen, + p, host, sizeof(host)); #endif - if (len < 0 || !INCR_OK(ds->ansp, ds->anslen, p, len + 4)) - return -1; - p += len + 4; + if (len < 0 || !INCR_OK(ds->ansp, ds->anslen, p, len + 4)) + return -1; + p += len + 4; } ds->ptr = p; ds->nanswers = nanswers; @@ -285,7 +286,7 @@ initparse(struct krb5int_dns_state *ds) */ int krb5int_dns_nextans(struct krb5int_dns_state *ds, - const unsigned char **pp, int *lenp) + const unsigned char **pp, int *lenp) { int len; unsigned char *p; @@ -300,30 +301,30 @@ krb5int_dns_nextans(struct krb5int_dns_state *ds, while (ds->nanswers--) { #if HAVE_DN_SKIPNAME - len = dn_skipname(p, (unsigned char *)ds->ansp + ds->anslen); + len = dn_skipname(p, (unsigned char *)ds->ansp + ds->anslen); #else - len = dn_expand(ds->ansp, (unsigned char *)ds->ansp + ds->anslen, - p, host, sizeof(host)); + len = dn_expand(ds->ansp, (unsigned char *)ds->ansp + ds->anslen, + p, host, sizeof(host)); #endif - if (len < 0 || !INCR_OK(ds->ansp, ds->anslen, p, len)) - return -1; - p += len; - SAFE_GETUINT16(ds->ansp, ds->anslen, p, 2, ntype, out); - /* Also skip 4 bytes of TTL */ - SAFE_GETUINT16(ds->ansp, ds->anslen, p, 6, nclass, out); - SAFE_GETUINT16(ds->ansp, ds->anslen, p, 2, rdlen, out); - - if (!INCR_OK(ds->ansp, ds->anslen, p, rdlen)) - return -1; - if (rdlen > INT_MAX) - return -1; - if (nclass == ds->nclass && ntype == ds->ntype) { - *pp = p; - *lenp = rdlen; - ds->ptr = p + rdlen; - return 0; - } - p += rdlen; + if (len < 0 || !INCR_OK(ds->ansp, ds->anslen, p, len)) + return -1; + p += len; + SAFE_GETUINT16(ds->ansp, ds->anslen, p, 2, ntype, out); + /* Also skip 4 bytes of TTL */ + SAFE_GETUINT16(ds->ansp, ds->anslen, p, 6, nclass, out); + SAFE_GETUINT16(ds->ansp, ds->anslen, p, 2, rdlen, out); + + if (!INCR_OK(ds->ansp, ds->anslen, p, rdlen)) + return -1; + if (rdlen > INT_MAX) + return -1; + if (nclass == ds->nclass && ntype == ds->ntype) { + *pp = p; + *lenp = rdlen; + ds->ptr = p + rdlen; + return 0; + } + p += rdlen; } return 0; out: |