[PATCH] Fix ptr resolving with cname
DannyAAM
danny at saru.moe
Wed Dec 16 03:59:29 UTC 2015
# HG changeset patch
# User DannyAAM <danny at saru.moe>
# Date 1449696194 -28800
# Thu Dec 10 05:23:14 2015 +0800
# Branch fix-ptr-cname
# Node ID 9d8c7332b7300908414e3bec78a90d9d14b30af8
# Parent dfe68c41f34f865bc7b45cbe6b7d0f639de283fc
Fix ptr resolving with cname
Make ptr process aware of cname & follow it.
(This depends on resolver's recursive answer.)
diff -r dfe68c41f34f -r 9d8c7332b730 src/core/ngx_resolver.c
--- a/src/core/ngx_resolver.c Wed Dec 09 17:47:21 2015 +0300
+++ b/src/core/ngx_resolver.c Thu Dec 10 05:23:14 2015 +0800
@@ -2032,7 +2032,7 @@
int32_t ttl;
ngx_int_t octet;
ngx_str_t name;
- ngx_uint_t i, mask, qident, class;
+ ngx_uint_t i, mask, qident, type, class;
ngx_queue_t *expire_queue;
ngx_rbtree_t *tree;
ngx_resolver_an_t *an;
@@ -2196,9 +2196,14 @@
goto invalid;
}
+
+
an = (ngx_resolver_an_t *) &buf[i + 2];
+cname_continue:
+
class = (an->class_hi << 8) + an->class_lo;
+ type = (an->type_hi << 8) + an->type_lo;
len = (an->len_hi << 8) + an->len_lo;
ttl = (an->ttl[0] << 24) + (an->ttl[1] << 16)
+ (an->ttl[2] << 8) + (an->ttl[3]);
@@ -2213,6 +2218,34 @@
ttl = 0;
}
+ /* CNAME processing */
+ if (type == NGX_RESOLVE_CNAME) {
+ do {
+ if (buf[i] == 0xc0) {
+ i += 2;
+ break;
+ } else {
+ i += 1 + buf[i];
+ }
+ } while (buf[i] != 0);
+ an = (ngx_resolver_an_t *) &buf[i];
+ len = (an->len_hi << 8) + an->len_lo;
+ i += sizeof(ngx_resolver_an_t) + len;
+
+ ngx_uint_t nameidx = i;
+ do {
+ if (buf[nameidx] == 0xc0) {
+ nameidx += 2;
+ break;
+ } else {
+ nameidx += 1 + buf[nameidx];
+ }
+ } while (buf[nameidx] != 0);
+ an = (ngx_resolver_an_t *) &buf[nameidx];
+
+ goto cname_continue;
+ }
+
ngx_log_debug3(NGX_LOG_DEBUG_CORE, r->log, 0,
"resolver qt:%ui cl:%ui len:%uz",
(an->type_hi << 8) + an->type_lo,
More information about the nginx-devel
mailing list