aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mail/ngx_mail_imap_handler.c26
-rw-r--r--src/mail/ngx_mail_parse.c18
2 files changed, 19 insertions, 25 deletions
diff --git a/src/mail/ngx_mail_imap_handler.c b/src/mail/ngx_mail_imap_handler.c
index 5dfdd7601..ba66b898c 100644
--- a/src/mail/ngx_mail_imap_handler.c
+++ b/src/mail/ngx_mail_imap_handler.c
@@ -101,10 +101,9 @@ ngx_mail_imap_init_protocol(ngx_event_t *rev)
void
ngx_mail_imap_auth_state(ngx_event_t *rev)
{
- u_char *p, *dst, *src, *end;
- ngx_str_t *arg;
+ u_char *p;
ngx_int_t rc;
- ngx_uint_t tag, i;
+ ngx_uint_t tag;
ngx_connection_t *c;
ngx_mail_session_t *s;
@@ -158,27 +157,6 @@ ngx_mail_imap_auth_state(ngx_event_t *rev)
ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0, "imap auth command: %i",
s->command);
- if (s->backslash) {
-
- arg = s->args.elts;
-
- for (i = 0; i < s->args.nelts; i++) {
- dst = arg[i].data;
- end = dst + arg[i].len;
-
- for (src = dst; src < end; dst++) {
- *dst = *src;
- if (*src++ == '\\') {
- *dst = *src++;
- }
- }
-
- arg[i].len = dst - arg[i].data;
- }
-
- s->backslash = 0;
- }
-
switch (s->mail_state) {
case ngx_imap_start:
diff --git a/src/mail/ngx_mail_parse.c b/src/mail/ngx_mail_parse.c
index 299858c14..cc5293093 100644
--- a/src/mail/ngx_mail_parse.c
+++ b/src/mail/ngx_mail_parse.c
@@ -227,7 +227,7 @@ invalid:
ngx_int_t
ngx_mail_imap_parse_command(ngx_mail_session_t *s)
{
- u_char ch, *p, *c;
+ u_char ch, *p, *c, *dst, *src, *end;
ngx_str_t *arg;
enum {
sw_start = 0,
@@ -470,6 +470,22 @@ ngx_mail_imap_parse_command(ngx_mail_session_t *s)
}
arg->len = p - s->arg_start;
arg->data = s->arg_start;
+
+ if (s->backslash) {
+ dst = s->arg_start;
+ end = p;
+
+ for (src = dst; src < end; dst++) {
+ *dst = *src;
+ if (*src++ == '\\') {
+ *dst = *src++;
+ }
+ }
+
+ arg->len = dst - s->arg_start;
+ s->backslash = 0;
+ }
+
s->arg_start = NULL;
switch (ch) {