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