Mercurial > hg > nginx
comparison src/mail/ngx_mail_smtp_handler.c @ 5475:07dd5bd222ac
Changed resolver API to use ngx_addr_t.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Fri, 06 Dec 2013 14:30:27 +0400 |
parents | 04e43d03e153 |
children | 98876ce2a7fd |
comparison
equal
deleted
inserted
replaced
5474:b43b02bb54db | 5475:07dd5bd222ac |
---|---|
53 | 53 |
54 | 54 |
55 void | 55 void |
56 ngx_mail_smtp_init_session(ngx_mail_session_t *s, ngx_connection_t *c) | 56 ngx_mail_smtp_init_session(ngx_mail_session_t *s, ngx_connection_t *c) |
57 { | 57 { |
58 struct sockaddr_in *sin; | |
59 ngx_resolver_ctx_t *ctx; | 58 ngx_resolver_ctx_t *ctx; |
60 ngx_mail_core_srv_conf_t *cscf; | 59 ngx_mail_core_srv_conf_t *cscf; |
61 | 60 |
62 cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module); | 61 cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module); |
63 | 62 |
65 s->host = smtp_unavailable; | 64 s->host = smtp_unavailable; |
66 ngx_mail_smtp_greeting(s, c); | 65 ngx_mail_smtp_greeting(s, c); |
67 return; | 66 return; |
68 } | 67 } |
69 | 68 |
70 if (c->sockaddr->sa_family != AF_INET) { | 69 #if (NGX_HAVE_UNIX_DOMAIN) |
70 if (c->sockaddr->sa_family == AF_UNIX) { | |
71 s->host = smtp_tempunavail; | 71 s->host = smtp_tempunavail; |
72 ngx_mail_smtp_greeting(s, c); | 72 ngx_mail_smtp_greeting(s, c); |
73 return; | 73 return; |
74 } | 74 } |
75 #endif | |
75 | 76 |
76 c->log->action = "in resolving client address"; | 77 c->log->action = "in resolving client address"; |
77 | 78 |
78 ctx = ngx_resolve_start(cscf->resolver, NULL); | 79 ctx = ngx_resolve_start(cscf->resolver, NULL); |
79 if (ctx == NULL) { | 80 if (ctx == NULL) { |
80 ngx_mail_close_connection(c); | 81 ngx_mail_close_connection(c); |
81 return; | 82 return; |
82 } | 83 } |
83 | 84 |
84 /* AF_INET only */ | 85 ctx->addr.sockaddr = c->sockaddr; |
85 | 86 ctx->addr.socklen = c->socklen; |
86 sin = (struct sockaddr_in *) c->sockaddr; | |
87 | |
88 ctx->addr = sin->sin_addr.s_addr; | |
89 ctx->handler = ngx_mail_smtp_resolve_addr_handler; | 87 ctx->handler = ngx_mail_smtp_resolve_addr_handler; |
90 ctx->data = s; | 88 ctx->data = s; |
91 ctx->timeout = cscf->resolver_timeout; | 89 ctx->timeout = cscf->resolver_timeout; |
92 | 90 |
93 if (ngx_resolve_addr(ctx) != NGX_OK) { | 91 if (ngx_resolve_addr(ctx) != NGX_OK) { |
179 | 177 |
180 | 178 |
181 static void | 179 static void |
182 ngx_mail_smtp_resolve_name_handler(ngx_resolver_ctx_t *ctx) | 180 ngx_mail_smtp_resolve_name_handler(ngx_resolver_ctx_t *ctx) |
183 { | 181 { |
184 in_addr_t addr; | |
185 ngx_uint_t i; | 182 ngx_uint_t i; |
186 ngx_connection_t *c; | 183 ngx_connection_t *c; |
187 struct sockaddr_in *sin; | |
188 ngx_mail_session_t *s; | 184 ngx_mail_session_t *s; |
189 | 185 |
190 s = ctx->data; | 186 s = ctx->data; |
191 c = s->connection; | 187 c = s->connection; |
192 | 188 |
203 s->host = smtp_tempunavail; | 199 s->host = smtp_tempunavail; |
204 } | 200 } |
205 | 201 |
206 } else { | 202 } else { |
207 | 203 |
208 /* AF_INET only */ | 204 #if (NGX_DEBUG) |
209 | 205 { |
210 sin = (struct sockaddr_in *) c->sockaddr; | 206 u_char text[NGX_SOCKADDR_STRLEN]; |
207 ngx_str_t addr; | |
208 | |
209 addr.data = text; | |
211 | 210 |
212 for (i = 0; i < ctx->naddrs; i++) { | 211 for (i = 0; i < ctx->naddrs; i++) { |
213 | 212 addr.len = ngx_sock_ntop(ctx->addrs[i].sockaddr, |
214 addr = ctx->addrs[i]; | 213 ctx->addrs[i].socklen, |
215 | 214 text, NGX_SOCKADDR_STRLEN, 0); |
216 ngx_log_debug4(NGX_LOG_DEBUG_MAIL, c->log, 0, | 215 |
217 "name was resolved to %ud.%ud.%ud.%ud", | 216 ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0, |
218 (ntohl(addr) >> 24) & 0xff, | 217 "name was resolved to %V", &addr); |
219 (ntohl(addr) >> 16) & 0xff, | 218 } |
220 (ntohl(addr) >> 8) & 0xff, | 219 } |
221 ntohl(addr) & 0xff); | 220 #endif |
222 | 221 |
223 if (addr == sin->sin_addr.s_addr) { | 222 for (i = 0; i < ctx->naddrs; i++) { |
223 if (ngx_cmp_sockaddr(ctx->addrs[i].sockaddr, ctx->addrs[i].socklen, | |
224 c->sockaddr, c->socklen, 0) | |
225 == NGX_OK) | |
226 { | |
224 goto found; | 227 goto found; |
225 } | 228 } |
226 } | 229 } |
227 | 230 |
228 s->host = smtp_unavailable; | 231 s->host = smtp_unavailable; |