comparison src/core/ngx_resolver.c @ 1961:99b9feacccb4

return NXDOMAIN for ".." in host name
author Igor Sysoev <igor@sysoev.ru>
date Wed, 09 Apr 2008 14:45:39 +0000
parents 1609b3c3d604
children 14463ae77723
comparison
equal deleted inserted replaced
1960:1609b3c3d604 1961:99b9feacccb4
367 static ngx_int_t 367 static ngx_int_t
368 ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx) 368 ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
369 { 369 {
370 uint32_t hash; 370 uint32_t hash;
371 in_addr_t addr, *addrs; 371 in_addr_t addr, *addrs;
372 ngx_int_t rc;
372 ngx_uint_t naddrs; 373 ngx_uint_t naddrs;
373 ngx_resolver_ctx_t *next; 374 ngx_resolver_ctx_t *next;
374 ngx_resolver_node_t *rn; 375 ngx_resolver_node_t *rn;
375 376
376 hash = ngx_crc32_short(ctx->name.data, ctx->name.len); 377 hash = ngx_crc32_short(ctx->name.data, ctx->name.len);
483 rn->query = NULL; 484 rn->query = NULL;
484 485
485 ngx_rbtree_insert(&r->name_rbtree, &rn->node); 486 ngx_rbtree_insert(&r->name_rbtree, &rn->node);
486 } 487 }
487 488
488 if (ngx_resolver_create_name_query(rn, ctx) != NGX_OK) { 489 rc = ngx_resolver_create_name_query(rn, ctx);
490
491 if (rc == NGX_ERROR) {
489 goto failed; 492 goto failed;
493 }
494
495 if (rc == NGX_DECLINED) {
496 ngx_rbtree_delete(&r->name_rbtree, &rn->node);
497
498 ngx_resolver_free(r, rn->query);
499 ngx_resolver_free(r, rn->name);
500 ngx_resolver_free(r, rn);
501
502 ctx->state = NGX_RESOLVE_NXDOMAIN;
503 ctx->handler(ctx);
504
505 return NGX_OK;
490 } 506 }
491 507
492 if (ngx_resolver_send_query(r, rn) != NGX_OK) { 508 if (ngx_resolver_send_query(r, rn) != NGX_OK) {
493 goto failed; 509 goto failed;
494 } 510 }
1694 if (*s != '.') { 1710 if (*s != '.') {
1695 *p = *s; 1711 *p = *s;
1696 len++; 1712 len++;
1697 1713
1698 } else { 1714 } else {
1715 if (len == 0) {
1716 return NGX_DECLINED;
1717 }
1718
1699 *p = (u_char) len; 1719 *p = (u_char) len;
1700 len = 0; 1720 len = 0;
1701 } 1721 }
1702 1722
1703 p--; 1723 p--;