Mercurial > hg > nginx-ranges
comparison src/mail/ngx_mail_imap_handler.c @ 635:e67b227c8dbb default tip
Merge with current.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 25 Apr 2011 04:07:55 +0400 |
parents | 8246d8a2c2be |
children |
comparison
equal
deleted
inserted
replaced
578:f3a9e57d2e17 | 635:e67b227c8dbb |
---|---|
37 { | 37 { |
38 ngx_mail_core_srv_conf_t *cscf; | 38 ngx_mail_core_srv_conf_t *cscf; |
39 | 39 |
40 cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module); | 40 cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module); |
41 | 41 |
42 s->out.len = sizeof(imap_greeting) - 1; | 42 ngx_str_set(&s->out, imap_greeting); |
43 s->out.data = imap_greeting; | |
44 | 43 |
45 c->read->handler = ngx_mail_imap_init_protocol; | 44 c->read->handler = ngx_mail_imap_init_protocol; |
46 | 45 |
47 ngx_add_timer(c->read, cscf->timeout); | 46 ngx_add_timer(c->read, cscf->timeout); |
48 | 47 |
134 return; | 133 return; |
135 } | 134 } |
136 | 135 |
137 tag = 1; | 136 tag = 1; |
138 s->text.len = 0; | 137 s->text.len = 0; |
139 s->out.len = sizeof(imap_ok) - 1; | 138 ngx_str_set(&s->out, imap_ok); |
140 s->out.data = imap_ok; | |
141 | 139 |
142 if (rc == NGX_OK) { | 140 if (rc == NGX_OK) { |
143 | 141 |
144 ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0, "imap auth command: %i", | 142 ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0, "imap auth command: %i", |
145 s->command); | 143 s->command); |
184 rc = ngx_mail_imap_capability(s, c); | 182 rc = ngx_mail_imap_capability(s, c); |
185 break; | 183 break; |
186 | 184 |
187 case NGX_IMAP_LOGOUT: | 185 case NGX_IMAP_LOGOUT: |
188 s->quit = 1; | 186 s->quit = 1; |
189 s->text.len = sizeof(imap_bye) - 1; | 187 ngx_str_set(&s->text, imap_bye); |
190 s->text.data = imap_bye; | |
191 break; | 188 break; |
192 | 189 |
193 case NGX_IMAP_NOOP: | 190 case NGX_IMAP_NOOP: |
194 break; | 191 break; |
195 | 192 |
206 | 203 |
207 case ngx_imap_auth_login_username: | 204 case ngx_imap_auth_login_username: |
208 rc = ngx_mail_auth_login_username(s, c, 0); | 205 rc = ngx_mail_auth_login_username(s, c, 0); |
209 | 206 |
210 tag = 0; | 207 tag = 0; |
211 s->out.len = sizeof(imap_password) - 1; | 208 ngx_str_set(&s->out, imap_password); |
212 s->out.data = imap_password; | |
213 s->mail_state = ngx_imap_auth_login_password; | 209 s->mail_state = ngx_imap_auth_login_password; |
214 | 210 |
215 break; | 211 break; |
216 | 212 |
217 case ngx_imap_auth_login_password: | 213 case ngx_imap_auth_login_password: |
227 break; | 223 break; |
228 } | 224 } |
229 | 225 |
230 } else if (rc == NGX_IMAP_NEXT) { | 226 } else if (rc == NGX_IMAP_NEXT) { |
231 tag = 0; | 227 tag = 0; |
232 s->out.len = sizeof(imap_next) - 1; | 228 ngx_str_set(&s->out, imap_next); |
233 s->out.data = imap_next; | |
234 } | 229 } |
235 | 230 |
236 switch (rc) { | 231 switch (rc) { |
237 | 232 |
238 case NGX_DONE: | 233 case NGX_DONE: |
243 ngx_mail_session_internal_server_error(s); | 238 ngx_mail_session_internal_server_error(s); |
244 return; | 239 return; |
245 | 240 |
246 case NGX_MAIL_PARSE_INVALID_COMMAND: | 241 case NGX_MAIL_PARSE_INVALID_COMMAND: |
247 s->state = 0; | 242 s->state = 0; |
248 s->out.len = sizeof(imap_invalid_command) - 1; | 243 ngx_str_set(&s->out, imap_invalid_command); |
249 s->out.data = imap_invalid_command; | |
250 s->mail_state = ngx_imap_start; | 244 s->mail_state = ngx_imap_start; |
251 break; | 245 break; |
252 } | 246 } |
253 | 247 |
254 if (tag) { | 248 if (tag) { |
255 if (s->tag.len == 0) { | 249 if (s->tag.len == 0) { |
256 s->tag.len = sizeof(imap_star) - 1; | 250 ngx_str_set(&s->tag, imap_star); |
257 s->tag.data = (u_char *) imap_star; | |
258 } | 251 } |
259 | 252 |
260 if (s->tagged_line.len < s->tag.len + s->text.len + s->out.len) { | 253 if (s->tagged_line.len < s->tag.len + s->text.len + s->out.len) { |
261 s->tagged_line.len = s->tag.len + s->text.len + s->out.len; | 254 s->tagged_line.len = s->tag.len + s->text.len + s->out.len; |
262 s->tagged_line.data = ngx_pnalloc(c->pool, s->tagged_line.len); | 255 s->tagged_line.data = ngx_pnalloc(c->pool, s->tagged_line.len); |
362 | 355 |
363 switch (rc) { | 356 switch (rc) { |
364 | 357 |
365 case NGX_MAIL_AUTH_LOGIN: | 358 case NGX_MAIL_AUTH_LOGIN: |
366 | 359 |
367 s->out.len = sizeof(imap_username) - 1; | 360 ngx_str_set(&s->out, imap_username); |
368 s->out.data = imap_username; | |
369 s->mail_state = ngx_imap_auth_login_username; | 361 s->mail_state = ngx_imap_auth_login_username; |
370 | 362 |
371 return NGX_OK; | 363 return NGX_OK; |
372 | 364 |
373 case NGX_MAIL_AUTH_LOGIN_USERNAME: | 365 case NGX_MAIL_AUTH_LOGIN_USERNAME: |
374 | 366 |
375 s->out.len = sizeof(imap_password) - 1; | 367 ngx_str_set(&s->out, imap_password); |
376 s->out.data = imap_password; | |
377 s->mail_state = ngx_imap_auth_login_password; | 368 s->mail_state = ngx_imap_auth_login_password; |
378 | 369 |
379 return ngx_mail_auth_login_username(s, c, 1); | 370 return ngx_mail_auth_login_username(s, c, 1); |
380 | 371 |
381 case NGX_MAIL_AUTH_PLAIN: | 372 case NGX_MAIL_AUTH_PLAIN: |
382 | 373 |
383 s->out.len = sizeof(imap_plain_next) - 1; | 374 ngx_str_set(&s->out, imap_plain_next); |
384 s->out.data = imap_plain_next; | |
385 s->mail_state = ngx_imap_auth_plain; | 375 s->mail_state = ngx_imap_auth_plain; |
386 | 376 |
387 return NGX_OK; | 377 return NGX_OK; |
388 | 378 |
389 case NGX_MAIL_AUTH_CRAM_MD5: | 379 case NGX_MAIL_AUTH_CRAM_MD5: |