comparison src/imap/ngx_imap_handler.c @ 1108:109e8c7d7cc1

return error for too long commands
author Igor Sysoev <igor@sysoev.ru>
date Wed, 14 Feb 2007 20:45:19 +0000
parents db7c468c447d
children b0fc4af1f196
comparison
equal deleted inserted replaced
1107:db7c468c447d 1108:109e8c7d7cc1
1210 static ngx_int_t 1210 static ngx_int_t
1211 ngx_imap_read_command(ngx_imap_session_t *s) 1211 ngx_imap_read_command(ngx_imap_session_t *s)
1212 { 1212 {
1213 ssize_t n; 1213 ssize_t n;
1214 ngx_int_t rc; 1214 ngx_int_t rc;
1215 ngx_str_t l;
1215 1216
1216 n = s->connection->recv(s->connection, s->buffer->last, 1217 n = s->connection->recv(s->connection, s->buffer->last,
1217 s->buffer->end - s->buffer->last); 1218 s->buffer->end - s->buffer->last);
1218 1219
1219 if (n == NGX_ERROR || n == 0) { 1220 if (n == NGX_ERROR || n == 0) {
1238 rc = ngx_pop3_parse_command(s); 1239 rc = ngx_pop3_parse_command(s);
1239 } else { 1240 } else {
1240 rc = ngx_imap_parse_command(s); 1241 rc = ngx_imap_parse_command(s);
1241 } 1242 }
1242 1243
1243 if (rc == NGX_AGAIN 1244 if (rc == NGX_AGAIN) {
1244 || rc == NGX_IMAP_NEXT 1245
1245 || rc == NGX_IMAP_PARSE_INVALID_COMMAND) 1246 if (s->buffer->last < s->buffer->end) {
1246 { 1247 return rc;
1248 }
1249
1250 l.len = s->buffer->last - s->buffer->start;
1251 l.data = s->buffer->start;
1252
1253 ngx_log_error(NGX_LOG_INFO, s->connection->log, 0,
1254 "client sent too long command \"%V\"", &l);
1255
1256 return NGX_IMAP_PARSE_INVALID_COMMAND;
1257 }
1258
1259 if (rc == NGX_IMAP_NEXT || rc == NGX_IMAP_PARSE_INVALID_COMMAND) {
1247 return rc; 1260 return rc;
1248 } 1261 }
1249 1262
1250 if (rc == NGX_ERROR) { 1263 if (rc == NGX_ERROR) {
1251 ngx_imap_close_connection(s->connection); 1264 ngx_imap_close_connection(s->connection);