diff src/imap/ngx_imap_handler.c @ 422:edaefb2a20fc

nginx-0.0.10-2004-09-12-00:22:11 import
author Igor Sysoev <igor@sysoev.ru>
date Sat, 11 Sep 2004 20:22:11 +0000
parents 01456a419cf9
children fda5987b188d
line wrap: on
line diff
--- a/src/imap/ngx_imap_handler.c
+++ b/src/imap/ngx_imap_handler.c
@@ -69,15 +69,15 @@ static void ngx_imap_init_session(ngx_ev
     s->connection = c;
 
     if (ngx_array_init(&s->args, c->pool, 2, sizeof(ngx_str_t)) == NGX_ERROR) {
-        ngx_imap_close_connection(s->connection);
+        ngx_imap_close_connection(c);
         return;
     }
 
     size = /* STUB: pop3: 128, imap: configurable 4K default */ 128;
 
-    s->buffer = ngx_create_temp_buf(s->connection->pool, size);
+    s->buffer = ngx_create_temp_buf(c->pool, size);
     if (s->buffer == NULL) {
-        ngx_imap_close_connection(s->connection);
+        ngx_imap_close_connection(c);
         return;
     }
 
@@ -89,10 +89,11 @@ static void ngx_imap_init_session(ngx_ev
 
 static void ngx_pop3_auth_state(ngx_event_t *rev)
 {
-    ngx_uint_t           quit;
     u_char              *text;
     ssize_t              size;
     ngx_int_t            rc;
+    ngx_uint_t           quit;
+    ngx_str_t           *arg;
     ngx_connection_t    *c;
     ngx_imap_session_t  *s;
 
@@ -123,6 +124,20 @@ static void ngx_pop3_auth_state(ngx_even
             case NGX_POP3_USER:
                 if (s->args.nelts == 1) {
                     s->imap_state = ngx_pop3_user;
+
+                    arg = s->args.elts;
+                    s->login.len = arg[0].len;
+                    s->login.data = ngx_palloc(c->pool, s->login.len + 1);
+                    if (s->login.data == NULL) {
+                        ngx_imap_close_connection(c);
+                        return;
+                    }
+
+                    ngx_cpystrn(s->login.data, arg[0].data, s->login.len + 1);
+
+                    ngx_log_debug1(NGX_LOG_DEBUG_IMAP, c->log, 0,
+                                   "pop3 login: \"%s\"", s->login.data);
+
                 } else {
                     rc = NGX_IMAP_PARSE_INVALID_COMMAND;
                 }
@@ -148,6 +163,27 @@ static void ngx_pop3_auth_state(ngx_even
             case NGX_POP3_PASS:
                 if (s->args.nelts == 1) {
                     /* STUB */ s->imap_state = ngx_pop3_start;
+
+                    arg = s->args.elts;
+                    s->passwd.len = arg[0].len;
+                    s->passwd.data = ngx_palloc(c->pool, s->passwd.len + 1);
+                    if (s->passwd.data == NULL) {
+                        ngx_imap_close_connection(c);
+                        return;
+                    }
+
+                    ngx_cpystrn(s->passwd.data, arg[0].data, s->passwd.len + 1);
+
+                    ngx_log_debug1(NGX_LOG_DEBUG_IMAP, c->log, 0,
+                                   "pop3 passwd: \"%s\"", s->passwd.data);
+
+                    s->buffer->pos = s->buffer->start;
+                    s->buffer->last = s->buffer->start;
+
+                    ngx_imap_proxy_init(s);
+
+                    return;
+
                 } else {
                     rc = NGX_IMAP_PARSE_INVALID_COMMAND;
                 }