annotate src/core/ngx_resolver.h @ 5264:b6ffe53f9c3d

Core: fixed possible use of an uninitialized variable. The call to ngx_sock_ntop() in ngx_connection_local_sockaddr() might be performed with the uninitialized "len" variable. The fix is to initialize variable to the size of corresponding socket address type. The issue was introduced in commit 05ba5bce31e0.
author Vladimir Homutov <vl@nginx.com>
date Thu, 11 Jul 2013 19:50:19 +0400
parents d620f497c50f
children 07dd5bd222ac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 4225
diff changeset
4 * Copyright (C) Nginx, Inc.
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #ifndef _NGX_RESOLVER_H_INCLUDED_
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 #define _NGX_RESOLVER_H_INCLUDED_
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 #define NGX_RESOLVE_A 1
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 #define NGX_RESOLVE_CNAME 5
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 #define NGX_RESOLVE_PTR 12
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 #define NGX_RESOLVE_MX 15
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 #define NGX_RESOLVE_TXT 16
1965
14463ae77723 take into account DNAME
Igor Sysoev <igor@sysoev.ru>
parents: 1913
diff changeset
21 #define NGX_RESOLVE_DNAME 39
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 #define NGX_RESOLVE_FORMERR 1
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 #define NGX_RESOLVE_SERVFAIL 2
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 #define NGX_RESOLVE_NXDOMAIN 3
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26 #define NGX_RESOLVE_NOTIMP 4
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 #define NGX_RESOLVE_REFUSED 5
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 #define NGX_RESOLVE_TIMEDOUT NGX_ETIMEDOUT
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30
1683
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1649
diff changeset
31 #define NGX_NO_RESOLVER (void *) -1
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1649
diff changeset
32
1969
41fd9a2e0755 limit CNAME recursion
Igor Sysoev <igor@sysoev.ru>
parents: 1965
diff changeset
33 #define NGX_RESOLVER_MAX_RECURSION 50
41fd9a2e0755 limit CNAME recursion
Igor Sysoev <igor@sysoev.ru>
parents: 1965
diff changeset
34
1683
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1649
diff changeset
35
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 typedef struct {
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37 ngx_connection_t *connection;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 struct sockaddr *sockaddr;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 socklen_t socklen;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40 ngx_str_t server;
3408
71193a456616 add context to a resolver log
Igor Sysoev <igor@sysoev.ru>
parents: 3269
diff changeset
41 ngx_log_t log;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 } ngx_udp_connection_t;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45 typedef struct ngx_resolver_ctx_s ngx_resolver_ctx_t;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47 typedef void (*ngx_resolver_handler_pt)(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 typedef struct {
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 ngx_rbtree_node_t node;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 ngx_queue_t queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54 /* PTR: resolved name, A: name to resolve */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 u_char *name;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 u_short nlen;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 u_short qlen;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 u_char *query;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 union {
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 in_addr_t addr;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 in_addr_t *addrs;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 u_char *cname;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 } u;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68 u_short naddrs;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 u_short cnlen;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 time_t expire;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72 time_t valid;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74 ngx_resolver_ctx_t *waiting;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75 } ngx_resolver_node_t;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78 typedef struct {
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79 /* has to be pointer because of "incomplete type" */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 ngx_event_t *event;
4225
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
81 void *dummy;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82 ngx_log_t *log;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84 /* ident must be after 3 pointers */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 ngx_int_t ident;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86
4225
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
87 /* simple round robin DNS peers balancer */
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
88 ngx_array_t udp_connections;
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
89 ngx_uint_t last_connection;
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
90
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 ngx_rbtree_t name_rbtree;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 ngx_rbtree_node_t name_sentinel;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94 ngx_rbtree_t addr_rbtree;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 ngx_rbtree_node_t addr_sentinel;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 ngx_queue_t name_resend_queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 ngx_queue_t addr_resend_queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 ngx_queue_t name_expire_queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 ngx_queue_t addr_expire_queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 time_t resend_timeout;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 time_t expire;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 time_t valid;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 ngx_uint_t log_level;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 } ngx_resolver_t;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111 struct ngx_resolver_ctx_s {
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112 ngx_resolver_ctx_t *next;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 ngx_resolver_t *resolver;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 ngx_udp_connection_t *udp_connection;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 /* ident must be after 3 pointers */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 ngx_int_t ident;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119 ngx_int_t state;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 ngx_int_t type;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121 ngx_str_t name;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 ngx_uint_t naddrs;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 in_addr_t *addrs;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 in_addr_t addr;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127 ngx_resolver_handler_pt handler;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128 void *data;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 ngx_msec_t timeout;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131 ngx_uint_t quick; /* unsigned quick:1; */
1969
41fd9a2e0755 limit CNAME recursion
Igor Sysoev <igor@sysoev.ru>
parents: 1965
diff changeset
132 ngx_uint_t recursion;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133 ngx_event_t *event;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 };
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136
4225
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
137 ngx_resolver_t *ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names,
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
138 ngx_uint_t n);
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
139 ngx_resolver_ctx_t *ngx_resolve_start(ngx_resolver_t *r,
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
140 ngx_resolver_ctx_t *temp);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
141 ngx_int_t ngx_resolve_name(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142 void ngx_resolve_name_done(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
143 ngx_int_t ngx_resolve_addr(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
144 void ngx_resolve_addr_done(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145 char *ngx_resolver_strerror(ngx_int_t err);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148 #endif /* _NGX_RESOLVER_H_INCLUDED_ */