Mercurial > hg > nginx-vendor-current
comparison src/http/ngx_http_parse.c @ 52:0d75d65c642f NGINX_0_1_26
nginx 0.1.26
*) Change: the invalid client header lines are now ignored and logged
at the info level.
*) Change: the server name is also logged in error log.
*) Feature: the ngx_http_auth_basic_module module and the auth_basic
and auth_basic_user_file directives.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Tue, 22 Mar 2005 00:00:00 +0300 |
parents | 72eb30262aac |
children | bcb5fce0b038 |
comparison
equal
deleted
inserted
replaced
51:43f383e47efc | 52:0d75d65c642f |
---|---|
495 sw_start = 0, | 495 sw_start = 0, |
496 sw_name, | 496 sw_name, |
497 sw_space_before_value, | 497 sw_space_before_value, |
498 sw_value, | 498 sw_value, |
499 sw_space_after_value, | 499 sw_space_after_value, |
500 sw_ignore_line, | |
501 sw_skip_line, | |
500 sw_almost_done, | 502 sw_almost_done, |
501 sw_header_almost_done, | 503 sw_header_almost_done |
502 sw_ignore_line | |
503 } state; | 504 } state; |
504 | 505 |
505 state = r->state; | 506 state = r->state; |
506 | 507 |
507 for (p = b->pos; p < b->last; p++) { | 508 for (p = b->pos; p < b->last; p++) { |
509 | 510 |
510 switch (state) { | 511 switch (state) { |
511 | 512 |
512 /* first char */ | 513 /* first char */ |
513 case sw_start: | 514 case sw_start: |
515 r->invalid_header = 0; | |
516 | |
514 switch (ch) { | 517 switch (ch) { |
515 case CR: | 518 case CR: |
516 r->header_end = p; | 519 r->header_end = p; |
517 state = sw_header_almost_done; | 520 state = sw_header_almost_done; |
518 break; | 521 break; |
526 c = (u_char) (ch | 0x20); | 529 c = (u_char) (ch | 0x20); |
527 if (c >= 'a' && c <= 'z') { | 530 if (c >= 'a' && c <= 'z') { |
528 break; | 531 break; |
529 } | 532 } |
530 | 533 |
531 if (ch == '-' || ch == '_' || ch == '~' || ch == '.') { | 534 if (ch == '-') { |
532 break; | 535 break; |
533 } | 536 } |
534 | 537 |
535 if (ch >= '0' && ch <= '9') { | 538 if (ch >= '0' && ch <= '9') { |
536 break; | 539 break; |
537 } | 540 } |
538 | 541 |
539 return NGX_HTTP_PARSE_INVALID_HEADER; | 542 r->invalid_header = 1; |
543 state = sw_skip_line; | |
544 break; | |
540 | 545 |
541 } | 546 } |
542 break; | 547 break; |
543 | 548 |
544 /* header name */ | 549 /* header name */ |
552 r->header_name_end = p; | 557 r->header_name_end = p; |
553 state = sw_space_before_value; | 558 state = sw_space_before_value; |
554 break; | 559 break; |
555 } | 560 } |
556 | 561 |
557 if (ch == '-' || ch == '_' || ch == '~' || ch == '.') { | 562 if (ch == '-') { |
558 break; | 563 break; |
559 } | 564 } |
560 | 565 |
561 if (ch >= '0' && ch <= '9') { | 566 if (ch >= '0' && ch <= '9') { |
562 break; | 567 break; |
570 { | 575 { |
571 state = sw_ignore_line; | 576 state = sw_ignore_line; |
572 break; | 577 break; |
573 } | 578 } |
574 | 579 |
575 return NGX_HTTP_PARSE_INVALID_HEADER; | 580 r->invalid_header = 1; |
581 state = sw_skip_line; | |
582 break; | |
576 | 583 |
577 /* space* before header value */ | 584 /* space* before header value */ |
578 case sw_space_before_value: | 585 case sw_space_before_value: |
579 switch (ch) { | 586 switch (ch) { |
580 case ' ': | 587 case ' ': |
630 case sw_ignore_line: | 637 case sw_ignore_line: |
631 switch (ch) { | 638 switch (ch) { |
632 case LF: | 639 case LF: |
633 state = sw_start; | 640 state = sw_start; |
634 break; | 641 break; |
642 default: | |
643 break; | |
644 } | |
645 break; | |
646 | |
647 /* skip header line */ | |
648 case sw_skip_line: | |
649 switch (ch) { | |
650 case CR: | |
651 r->header_end = p; | |
652 state = sw_almost_done; | |
653 break; | |
654 case LF: | |
655 r->header_end = p; | |
656 goto done; | |
635 default: | 657 default: |
636 break; | 658 break; |
637 } | 659 } |
638 break; | 660 break; |
639 | 661 |