diff options
Diffstat (limited to 'contrib/check_http-with-client-certificate.c')
-rw-r--r-- | contrib/check_http-with-client-certificate.c | 142 |
1 files changed, 71 insertions, 71 deletions
diff --git a/contrib/check_http-with-client-certificate.c b/contrib/check_http-with-client-certificate.c index 60e14812..c47cbd4f 100644 --- a/contrib/check_http-with-client-certificate.c +++ b/contrib/check_http-with-client-certificate.c | |||
@@ -606,7 +606,7 @@ process_arguments( int argc, char **argv ) | |||
606 | *if ( !is_hostname( optarg ) ) | 606 | *if ( !is_hostname( optarg ) ) |
607 | * usage2( "invalid hostname", optarg ); | 607 | * usage2( "invalid hostname", optarg ); |
608 | */ | 608 | */ |
609 | asprintf( &server_hostname, "%s", optarg ); | 609 | xasprintf( &server_hostname, "%s", optarg ); |
610 | use_server_hostname = TRUE; | 610 | use_server_hostname = TRUE; |
611 | break; | 611 | break; |
612 | case 'F': /* File (dummy) */ | 612 | case 'F': /* File (dummy) */ |
@@ -619,7 +619,7 @@ process_arguments( int argc, char **argv ) | |||
619 | *if ( !is_host( optarg ) ) | 619 | *if ( !is_host( optarg ) ) |
620 | * usage2( "invalid ip address or hostname", optarg ) | 620 | * usage2( "invalid ip address or hostname", optarg ) |
621 | */ | 621 | */ |
622 | asprintf( &server_host, "%s", optarg ); | 622 | xasprintf( &server_host, "%s", optarg ); |
623 | break; | 623 | break; |
624 | case 'p': /* Server port */ | 624 | case 'p': /* Server port */ |
625 | if ( !is_intnonneg( optarg ) ) | 625 | if ( !is_intnonneg( optarg ) ) |
@@ -653,7 +653,7 @@ process_arguments( int argc, char **argv ) | |||
653 | break; | 653 | break; |
654 | case 'A': /* client certificate */ | 654 | case 'A': /* client certificate */ |
655 | #ifdef HAVE_SSL | 655 | #ifdef HAVE_SSL |
656 | asprintf( &client_certificate_file, "%s", optarg ); | 656 | xasprintf( &client_certificate_file, "%s", optarg ); |
657 | use_client_certificate = TRUE; | 657 | use_client_certificate = TRUE; |
658 | #else | 658 | #else |
659 | usage( "check_http: invalid option - SSL is not available\n" ); | 659 | usage( "check_http: invalid option - SSL is not available\n" ); |
@@ -661,26 +661,26 @@ process_arguments( int argc, char **argv ) | |||
661 | break; | 661 | break; |
662 | case 'K': /* client certificate passphrase */ | 662 | case 'K': /* client certificate passphrase */ |
663 | #ifdef HAVE_SSL | 663 | #ifdef HAVE_SSL |
664 | asprintf( &client_certificate_passphrase, "%s", optarg ); | 664 | xasprintf( &client_certificate_passphrase, "%s", optarg ); |
665 | use_client_certificate_passphrase = TRUE; | 665 | use_client_certificate_passphrase = TRUE; |
666 | #else | 666 | #else |
667 | usage( "check_http: invalid option - SSL is not available\n" ); | 667 | usage( "check_http: invalid option - SSL is not available\n" ); |
668 | #endif | 668 | #endif |
669 | case 'Z': /* valid CA certificates */ | 669 | case 'Z': /* valid CA certificates */ |
670 | #ifdef HAVE_SSL | 670 | #ifdef HAVE_SSL |
671 | asprintf( &ca_certificate_file, "%s", optarg ); | 671 | xasprintf( &ca_certificate_file, "%s", optarg ); |
672 | use_ca_certificate = TRUE; | 672 | use_ca_certificate = TRUE; |
673 | #else | 673 | #else |
674 | usage( "check_http: invalid option - SSL is not available\n" ); | 674 | usage( "check_http: invalid option - SSL is not available\n" ); |
675 | #endif | 675 | #endif |
676 | break; | 676 | break; |
677 | case 'u': /* URL PATH */ | 677 | case 'u': /* URL PATH */ |
678 | asprintf( &http_url_path, "%s", optarg ); | 678 | xasprintf( &http_url_path, "%s", optarg ); |
679 | break; | 679 | break; |
680 | case 'P': /* POST DATA */ | 680 | case 'P': /* POST DATA */ |
681 | asprintf( &http_post_data, "%s", optarg ); | 681 | xasprintf( &http_post_data, "%s", optarg ); |
682 | use_http_post_data = TRUE; | 682 | use_http_post_data = TRUE; |
683 | asprintf( &http_method, "%s", "POST" ); | 683 | xasprintf( &http_method, "%s", "POST" ); |
684 | break; | 684 | break; |
685 | case 'e': /* expected string in first line of HTTP response */ | 685 | case 'e': /* expected string in first line of HTTP response */ |
686 | strncpy( http_expect , optarg, MAX_INPUT_BUFFER - 1 ); | 686 | strncpy( http_expect , optarg, MAX_INPUT_BUFFER - 1 ); |
@@ -765,13 +765,13 @@ process_arguments( int argc, char **argv ) | |||
765 | * without an option | 765 | * without an option |
766 | */ | 766 | */ |
767 | if ( ( strcmp( server_host, "" ) ) && (c < argc) ) { | 767 | if ( ( strcmp( server_host, "" ) ) && (c < argc) ) { |
768 | asprintf( &server_host, "%s", argv[c++] ); | 768 | xasprintf( &server_host, "%s", argv[c++] ); |
769 | } | 769 | } |
770 | 770 | ||
771 | /* 2. check if another artument is supplied | 771 | /* 2. check if another artument is supplied |
772 | */ | 772 | */ |
773 | if ( ( strcmp( server_hostname, "" ) == 0 ) && (c < argc) ) { | 773 | if ( ( strcmp( server_hostname, "" ) == 0 ) && (c < argc) ) { |
774 | asprintf( &server_hostname, "%s", argv[c++] ); | 774 | xasprintf( &server_hostname, "%s", argv[c++] ); |
775 | } | 775 | } |
776 | 776 | ||
777 | /* 3. if host is still not defined, just copy hostname, | 777 | /* 3. if host is still not defined, just copy hostname, |
@@ -781,7 +781,7 @@ process_arguments( int argc, char **argv ) | |||
781 | if ( strcmp( server_hostname, "" ) == 0 ) { | 781 | if ( strcmp( server_hostname, "" ) == 0 ) { |
782 | usage ("check_http: you must specify a server address or host name\n"); | 782 | usage ("check_http: you must specify a server address or host name\n"); |
783 | } else { | 783 | } else { |
784 | asprintf( &server_host, "%s", server_hostname ); | 784 | xasprintf( &server_host, "%s", server_hostname ); |
785 | } | 785 | } |
786 | } | 786 | } |
787 | 787 | ||
@@ -807,9 +807,9 @@ process_arguments( int argc, char **argv ) | |||
807 | 807 | ||
808 | /* Finally set some default values if necessary */ | 808 | /* Finally set some default values if necessary */ |
809 | if ( strcmp( http_method, "" ) == 0 ) | 809 | if ( strcmp( http_method, "" ) == 0 ) |
810 | asprintf( &http_method, "%s", DEFAULT_HTTP_METHOD ); | 810 | xasprintf( &http_method, "%s", DEFAULT_HTTP_METHOD ); |
811 | if ( strcmp( http_url_path, "" ) == 0 ) { | 811 | if ( strcmp( http_url_path, "" ) == 0 ) { |
812 | asprintf( &http_url_path, "%s", DEFAULT_HTTP_URL_PATH ); | 812 | xasprintf( &http_url_path, "%s", DEFAULT_HTTP_URL_PATH ); |
813 | } | 813 | } |
814 | 814 | ||
815 | return TRUE; | 815 | return TRUE; |
@@ -829,25 +829,25 @@ http_request( int sock, struct pageref *page ) | |||
829 | size_t size = 0; | 829 | size_t size = 0; |
830 | char *basic_auth_encoded = NULL; | 830 | char *basic_auth_encoded = NULL; |
831 | 831 | ||
832 | asprintf( &buffer, HTTP_TEMPLATE_REQUEST, buffer, http_method, http_url_path ); | 832 | xasprintf( &buffer, HTTP_TEMPLATE_REQUEST, buffer, http_method, http_url_path ); |
833 | 833 | ||
834 | asprintf( &buffer, HTTP_TEMPLATE_HEADER_USERAGENT, buffer, progname, REVISION, PACKAGE_VERSION ); | 834 | xasprintf( &buffer, HTTP_TEMPLATE_HEADER_USERAGENT, buffer, progname, REVISION, PACKAGE_VERSION ); |
835 | 835 | ||
836 | if ( use_server_hostname ) { | 836 | if ( use_server_hostname ) { |
837 | asprintf( &buffer, HTTP_TEMPLATE_HEADER_HOST, buffer, server_hostname ); | 837 | xasprintf( &buffer, HTTP_TEMPLATE_HEADER_HOST, buffer, server_hostname ); |
838 | } | 838 | } |
839 | 839 | ||
840 | if ( use_basic_auth ) { | 840 | if ( use_basic_auth ) { |
841 | basic_auth_encoded = base64( basic_auth, strlen( basic_auth ) ); | 841 | basic_auth_encoded = base64( basic_auth, strlen( basic_auth ) ); |
842 | asprintf( &buffer, HTTP_TEMPLATE_HEADER_AUTH, buffer, basic_auth_encoded ); | 842 | xasprintf( &buffer, HTTP_TEMPLATE_HEADER_AUTH, buffer, basic_auth_encoded ); |
843 | } | 843 | } |
844 | 844 | ||
845 | /* either send http POST data */ | 845 | /* either send http POST data */ |
846 | if ( use_http_post_data ) { | 846 | if ( use_http_post_data ) { |
847 | /* based on code written by Chris Henesy <lurker@shadowtech.org> */ | 847 | /* based on code written by Chris Henesy <lurker@shadowtech.org> */ |
848 | asprintf( &buffer, "Content-Type: application/x-www-form-urlencoded\r\n" ); | 848 | xasprintf( &buffer, "Content-Type: application/x-www-form-urlencoded\r\n" ); |
849 | asprintf( &buffer, "Content-Length: %i\r\n\r\n", buffer, content_len ); | 849 | xasprintf( &buffer, "Content-Length: %i\r\n\r\n", buffer, content_len ); |
850 | asprintf( &buffer, "%s%s%s", buffer, http_post_data, "\r\n" ); | 850 | xasprintf( &buffer, "%s%s%s", buffer, http_post_data, "\r\n" ); |
851 | sendsize = send( sock, buffer, strlen( buffer ), 0 ); | 851 | sendsize = send( sock, buffer, strlen( buffer ), 0 ); |
852 | if ( sendsize < strlen( buffer ) ) { | 852 | if ( sendsize < strlen( buffer ) ) { |
853 | printf( "ERROR: Incomplete write\n" ); | 853 | printf( "ERROR: Incomplete write\n" ); |
@@ -855,7 +855,7 @@ http_request( int sock, struct pageref *page ) | |||
855 | } | 855 | } |
856 | /* or just a newline */ | 856 | /* or just a newline */ |
857 | } else { | 857 | } else { |
858 | asprintf( &buffer, "%s%s", buffer, "\r\n" ); | 858 | xasprintf( &buffer, "%s%s", buffer, "\r\n" ); |
859 | sendsize = send( sock, buffer, strlen( buffer ) , 0 ); | 859 | sendsize = send( sock, buffer, strlen( buffer ) , 0 ); |
860 | if ( sendsize < strlen( buffer ) ) { | 860 | if ( sendsize < strlen( buffer ) ) { |
861 | printf( "ERROR: Incomplete write\n" ); | 861 | printf( "ERROR: Incomplete write\n" ); |
@@ -870,12 +870,12 @@ http_request( int sock, struct pageref *page ) | |||
870 | recvsize = recv( sock, recvbuff, MAX_INPUT_BUFFER - 1, 0 ); | 870 | recvsize = recv( sock, recvbuff, MAX_INPUT_BUFFER - 1, 0 ); |
871 | if ( recvsize > (size_t) 0 ) { | 871 | if ( recvsize > (size_t) 0 ) { |
872 | recvbuff[recvsize] = '\0'; | 872 | recvbuff[recvsize] = '\0'; |
873 | asprintf( &content, "%s%s", content, recvbuff ); | 873 | xasprintf( &content, "%s%s", content, recvbuff ); |
874 | size += recvsize; | 874 | size += recvsize; |
875 | } | 875 | } |
876 | } while ( recvsize > (size_t) 0 ); | 876 | } while ( recvsize > (size_t) 0 ); |
877 | 877 | ||
878 | asprintf( &page->content, "%s", content ); | 878 | xasprintf( &page->content, "%s", content ); |
879 | page->size = size; | 879 | page->size = size; |
880 | 880 | ||
881 | /* return a CRITICAL status if we couldn't read any data */ | 881 | /* return a CRITICAL status if we couldn't read any data */ |
@@ -895,7 +895,7 @@ parse_http_response( struct pageref *page ) | |||
895 | size_t len = 0; //temporary used | 895 | size_t len = 0; //temporary used |
896 | char *pos = ""; //temporary used | 896 | char *pos = ""; //temporary used |
897 | 897 | ||
898 | asprintf( &content, "%s", page->content ); | 898 | xasprintf( &content, "%s", page->content ); |
899 | 899 | ||
900 | /* find status line and null-terminate it */ | 900 | /* find status line and null-terminate it */ |
901 | // copy content to status | 901 | // copy content to status |
@@ -962,7 +962,7 @@ check_http_response( struct pageref *page ) | |||
962 | 962 | ||
963 | /* check response time befor anything else */ | 963 | /* check response time befor anything else */ |
964 | if ( use_critical_interval && ( elapsed_time > critical_interval ) ) { | 964 | if ( use_critical_interval && ( elapsed_time > critical_interval ) ) { |
965 | asprintf( &msg, RESULT_TEMPLATE_RESPONSE_TIME, | 965 | xasprintf( &msg, RESULT_TEMPLATE_RESPONSE_TIME, |
966 | protocol_text( use_ssl ), | 966 | protocol_text( use_ssl ), |
967 | state_text( STATE_CRITICAL ), | 967 | state_text( STATE_CRITICAL ), |
968 | elapsed_time, | 968 | elapsed_time, |
@@ -970,7 +970,7 @@ check_http_response( struct pageref *page ) | |||
970 | terminate( STATE_CRITICAL, msg ); | 970 | terminate( STATE_CRITICAL, msg ); |
971 | } | 971 | } |
972 | if ( use_warning_interval && ( elapsed_time > warning_interval ) ) { | 972 | if ( use_warning_interval && ( elapsed_time > warning_interval ) ) { |
973 | asprintf( &msg, RESULT_TEMPLATE_RESPONSE_TIME, | 973 | xasprintf( &msg, RESULT_TEMPLATE_RESPONSE_TIME, |
974 | protocol_text( use_ssl ), | 974 | protocol_text( use_ssl ), |
975 | state_text( STATE_WARNING ), | 975 | state_text( STATE_WARNING ), |
976 | elapsed_time, | 976 | elapsed_time, |
@@ -990,9 +990,9 @@ check_http_response( struct pageref *page ) | |||
990 | #else | 990 | #else |
991 | ) | 991 | ) |
992 | #endif | 992 | #endif |
993 | asprintf( &msg, "Expected HTTP response received from host\n" ); | 993 | xasprintf( &msg, "Expected HTTP response received from host\n" ); |
994 | else | 994 | else |
995 | asprintf( &msg, "Expected HTTP response received from host on port %d\n", server_port ); | 995 | xasprintf( &msg, "Expected HTTP response received from host on port %d\n", server_port ); |
996 | terminate( STATE_OK, msg ); | 996 | terminate( STATE_OK, msg ); |
997 | } | 997 | } |
998 | } else { | 998 | } else { |
@@ -1002,9 +1002,9 @@ check_http_response( struct pageref *page ) | |||
1002 | #else | 1002 | #else |
1003 | ) | 1003 | ) |
1004 | #endif | 1004 | #endif |
1005 | asprintf( &msg, "Invalid HTTP response received from host\n" ); | 1005 | xasprintf( &msg, "Invalid HTTP response received from host\n" ); |
1006 | else | 1006 | else |
1007 | asprintf( &msg, "Invalid HTTP response received from host on port %d\n", server_port ); | 1007 | xasprintf( &msg, "Invalid HTTP response received from host on port %d\n", server_port ); |
1008 | terminate( STATE_CRITICAL, msg ); | 1008 | terminate( STATE_CRITICAL, msg ); |
1009 | } | 1009 | } |
1010 | 1010 | ||
@@ -1016,7 +1016,7 @@ check_http_response( struct pageref *page ) | |||
1016 | strstr( page->status, "503" ) || | 1016 | strstr( page->status, "503" ) || |
1017 | strstr( page->status, "504" ) || | 1017 | strstr( page->status, "504" ) || |
1018 | strstr( page->status, "505" )) { | 1018 | strstr( page->status, "505" )) { |
1019 | asprintf( &msg, RESULT_TEMPLATE_STATUS_RESPONSE_TIME, | 1019 | xasprintf( &msg, RESULT_TEMPLATE_STATUS_RESPONSE_TIME, |
1020 | protocol_text( use_ssl ), | 1020 | protocol_text( use_ssl ), |
1021 | state_text( http_client_error_state ), | 1021 | state_text( http_client_error_state ), |
1022 | page->status, | 1022 | page->status, |
@@ -1044,7 +1044,7 @@ check_http_response( struct pageref *page ) | |||
1044 | strstr( page->status, "415" ) || | 1044 | strstr( page->status, "415" ) || |
1045 | strstr( page->status, "416" ) || | 1045 | strstr( page->status, "416" ) || |
1046 | strstr( page->status, "417" ) ) { | 1046 | strstr( page->status, "417" ) ) { |
1047 | asprintf( &msg, RESULT_TEMPLATE_STATUS_RESPONSE_TIME, | 1047 | xasprintf( &msg, RESULT_TEMPLATE_STATUS_RESPONSE_TIME, |
1048 | protocol_text( use_ssl ), | 1048 | protocol_text( use_ssl ), |
1049 | state_text( http_client_error_state ), | 1049 | state_text( http_client_error_state ), |
1050 | page->status, | 1050 | page->status, |
@@ -1066,7 +1066,7 @@ check_http_response( struct pageref *page ) | |||
1066 | /* returning STATE_DEPENDENT means follow redirect */ | 1066 | /* returning STATE_DEPENDENT means follow redirect */ |
1067 | return STATE_DEPENDENT; | 1067 | return STATE_DEPENDENT; |
1068 | } else { | 1068 | } else { |
1069 | asprintf( &msg, RESULT_TEMPLATE_STATUS_RESPONSE_TIME, | 1069 | xasprintf( &msg, RESULT_TEMPLATE_STATUS_RESPONSE_TIME, |
1070 | protocol_text( use_ssl ), | 1070 | protocol_text( use_ssl ), |
1071 | state_text( http_redirect_state ), | 1071 | state_text( http_redirect_state ), |
1072 | page->status, | 1072 | page->status, |
@@ -1087,7 +1087,7 @@ check_http_content( struct pageref *page ) | |||
1087 | /* check for string in content */ | 1087 | /* check for string in content */ |
1088 | if ( check_content_string ) { | 1088 | if ( check_content_string ) { |
1089 | if ( strstr( page->content, content_string ) ) { | 1089 | if ( strstr( page->content, content_string ) ) { |
1090 | asprintf( &msg, RESULT_TEMPLATE_STATUS_RESPONSE_TIME, | 1090 | xasprintf( &msg, RESULT_TEMPLATE_STATUS_RESPONSE_TIME, |
1091 | protocol_text( use_ssl ), | 1091 | protocol_text( use_ssl ), |
1092 | state_text( STATE_OK ), | 1092 | state_text( STATE_OK ), |
1093 | page->status, | 1093 | page->status, |
@@ -1095,7 +1095,7 @@ check_http_content( struct pageref *page ) | |||
1095 | elapsed_time ); | 1095 | elapsed_time ); |
1096 | terminate( STATE_OK, msg ); | 1096 | terminate( STATE_OK, msg ); |
1097 | } else { | 1097 | } else { |
1098 | asprintf( &msg, RESULT_TEMPLATE_STATUS_RESPONSE_TIME, | 1098 | xasprintf( &msg, RESULT_TEMPLATE_STATUS_RESPONSE_TIME, |
1099 | protocol_text( use_ssl ), | 1099 | protocol_text( use_ssl ), |
1100 | state_text( STATE_CRITICAL ), | 1100 | state_text( STATE_CRITICAL ), |
1101 | page->status, | 1101 | page->status, |
@@ -1110,7 +1110,7 @@ check_http_content( struct pageref *page ) | |||
1110 | if ( check_content_regex ) { | 1110 | if ( check_content_regex ) { |
1111 | regex_error = regexec( ®ex_preg, page->content, REGEX_REGS, regex_pmatch, 0); | 1111 | regex_error = regexec( ®ex_preg, page->content, REGEX_REGS, regex_pmatch, 0); |
1112 | if ( regex_error == 0 ) { | 1112 | if ( regex_error == 0 ) { |
1113 | asprintf( &msg, RESULT_TEMPLATE_STATUS_RESPONSE_TIME, | 1113 | xasprintf( &msg, RESULT_TEMPLATE_STATUS_RESPONSE_TIME, |
1114 | protocol_text( use_ssl ), | 1114 | protocol_text( use_ssl ), |
1115 | state_text( STATE_OK ), | 1115 | state_text( STATE_OK ), |
1116 | page->status, | 1116 | page->status, |
@@ -1119,13 +1119,13 @@ check_http_content( struct pageref *page ) | |||
1119 | terminate( STATE_OK, msg ); | 1119 | terminate( STATE_OK, msg ); |
1120 | } else { | 1120 | } else { |
1121 | if ( regex_error == REG_NOMATCH ) { | 1121 | if ( regex_error == REG_NOMATCH ) { |
1122 | asprintf( &msg, "%s, %s: regex pattern not found\n", | 1122 | xasprintf( &msg, "%s, %s: regex pattern not found\n", |
1123 | protocol_text( use_ssl) , | 1123 | protocol_text( use_ssl) , |
1124 | state_text( STATE_CRITICAL ) ); | 1124 | state_text( STATE_CRITICAL ) ); |
1125 | terminate( STATE_CRITICAL, msg ); | 1125 | terminate( STATE_CRITICAL, msg ); |
1126 | } else { | 1126 | } else { |
1127 | regerror( regex_error, ®ex_preg, regex_error_buffer, MAX_INPUT_BUFFER); | 1127 | regerror( regex_error, ®ex_preg, regex_error_buffer, MAX_INPUT_BUFFER); |
1128 | asprintf( &msg, "%s %s: Regex execute Error: %s\n", | 1128 | xasprintf( &msg, "%s %s: Regex execute Error: %s\n", |
1129 | protocol_text( use_ssl) , | 1129 | protocol_text( use_ssl) , |
1130 | state_text( STATE_CRITICAL ), | 1130 | state_text( STATE_CRITICAL ), |
1131 | regex_error_buffer ); | 1131 | regex_error_buffer ); |
@@ -1152,16 +1152,16 @@ prepare_follow_redirect( struct pageref *page ) | |||
1152 | char *orig_url_dirname = NULL; | 1152 | char *orig_url_dirname = NULL; |
1153 | size_t len = 0; | 1153 | size_t len = 0; |
1154 | 1154 | ||
1155 | asprintf( &header, "%s", page->header ); | 1155 | xasprintf( &header, "%s", page->header ); |
1156 | 1156 | ||
1157 | 1157 | ||
1158 | /* restore some default values */ | 1158 | /* restore some default values */ |
1159 | use_http_post_data = FALSE; | 1159 | use_http_post_data = FALSE; |
1160 | asprintf( &http_method, "%s", DEFAULT_HTTP_METHOD ); | 1160 | xasprintf( &http_method, "%s", DEFAULT_HTTP_METHOD ); |
1161 | 1161 | ||
1162 | /* copy url of original request, maybe we need it to compose | 1162 | /* copy url of original request, maybe we need it to compose |
1163 | absolute url from relative Location: header */ | 1163 | absolute url from relative Location: header */ |
1164 | asprintf( &orig_url_path, "%s", http_url_path ); | 1164 | xasprintf( &orig_url_path, "%s", http_url_path ); |
1165 | 1165 | ||
1166 | while ( strcspn( header, "\r\n" ) > (size_t) 0 ) { | 1166 | while ( strcspn( header, "\r\n" ) > (size_t) 0 ) { |
1167 | url_path = realloc( url_path, (size_t) strcspn( header, "\r\n" ) ); | 1167 | url_path = realloc( url_path, (size_t) strcspn( header, "\r\n" ) ); |
@@ -1172,43 +1172,43 @@ prepare_follow_redirect( struct pageref *page ) | |||
1172 | /* Try to find a Location header combination of METHOD HOSTNAME PORT and PATH */ | 1172 | /* Try to find a Location header combination of METHOD HOSTNAME PORT and PATH */ |
1173 | /* 1. scan for Location: http[s]://hostname:port/path */ | 1173 | /* 1. scan for Location: http[s]://hostname:port/path */ |
1174 | if ( sscanf ( header, HTTP_HEADER_LOCATION_MATCH HTTP_HEADER_PROTOCOL_MATCH HTTP_HEADER_HOSTNAME_MATCH HTTP_HEADER_PORT_MATCH HTTP_HEADER_URL_PATH_MATCH, &protocol, &hostname, &port, url_path ) == 4 ) { | 1174 | if ( sscanf ( header, HTTP_HEADER_LOCATION_MATCH HTTP_HEADER_PROTOCOL_MATCH HTTP_HEADER_HOSTNAME_MATCH HTTP_HEADER_PORT_MATCH HTTP_HEADER_URL_PATH_MATCH, &protocol, &hostname, &port, url_path ) == 4 ) { |
1175 | asprintf( &server_hostname, "%s", hostname ); | 1175 | xasprintf( &server_hostname, "%s", hostname ); |
1176 | asprintf( &server_host, "%s", hostname ); | 1176 | xasprintf( &server_host, "%s", hostname ); |
1177 | use_ssl = chk_protocol(protocol); | 1177 | use_ssl = chk_protocol(protocol); |
1178 | server_port = atoi( port ); | 1178 | server_port = atoi( port ); |
1179 | asprintf( &http_url_path, "%s", url_path ); | 1179 | xasprintf( &http_url_path, "%s", url_path ); |
1180 | return STATE_DEPENDENT; | 1180 | return STATE_DEPENDENT; |
1181 | } | 1181 | } |
1182 | else if ( sscanf ( header, HTTP_HEADER_LOCATION_MATCH HTTP_HEADER_PROTOCOL_MATCH HTTP_HEADER_HOSTNAME_MATCH HTTP_HEADER_URL_PATH_MATCH, &protocol, &hostname, url_path ) == 3) { | 1182 | else if ( sscanf ( header, HTTP_HEADER_LOCATION_MATCH HTTP_HEADER_PROTOCOL_MATCH HTTP_HEADER_HOSTNAME_MATCH HTTP_HEADER_URL_PATH_MATCH, &protocol, &hostname, url_path ) == 3) { |
1183 | asprintf( &server_hostname, "%s", hostname ); | 1183 | xasprintf( &server_hostname, "%s", hostname ); |
1184 | asprintf( &server_host, "%s", hostname ); | 1184 | xasprintf( &server_host, "%s", hostname ); |
1185 | use_ssl = chk_protocol(protocol); | 1185 | use_ssl = chk_protocol(protocol); |
1186 | server_port = protocol_std_port(use_ssl); | 1186 | server_port = protocol_std_port(use_ssl); |
1187 | asprintf( &http_url_path, "%s", url_path ); | 1187 | xasprintf( &http_url_path, "%s", url_path ); |
1188 | return STATE_DEPENDENT; | 1188 | return STATE_DEPENDENT; |
1189 | } | 1189 | } |
1190 | else if ( sscanf ( header, HTTP_HEADER_LOCATION_MATCH HTTP_HEADER_PROTOCOL_MATCH HTTP_HEADER_HOSTNAME_MATCH HTTP_HEADER_PORT_MATCH, &protocol, &hostname, &port ) == 3) { | 1190 | else if ( sscanf ( header, HTTP_HEADER_LOCATION_MATCH HTTP_HEADER_PROTOCOL_MATCH HTTP_HEADER_HOSTNAME_MATCH HTTP_HEADER_PORT_MATCH, &protocol, &hostname, &port ) == 3) { |
1191 | asprintf( &server_hostname, "%s", hostname ); | 1191 | xasprintf( &server_hostname, "%s", hostname ); |
1192 | asprintf( &server_host, "%s", hostname ); | 1192 | xasprintf( &server_host, "%s", hostname ); |
1193 | use_ssl = chk_protocol(protocol); | 1193 | use_ssl = chk_protocol(protocol); |
1194 | server_port = atoi( port ); | 1194 | server_port = atoi( port ); |
1195 | asprintf( &http_url_path, "%s", DEFAULT_HTTP_URL_PATH ); | 1195 | xasprintf( &http_url_path, "%s", DEFAULT_HTTP_URL_PATH ); |
1196 | return STATE_DEPENDENT; | 1196 | return STATE_DEPENDENT; |
1197 | } | 1197 | } |
1198 | else if ( sscanf ( header, HTTP_HEADER_LOCATION_MATCH HTTP_HEADER_PROTOCOL_MATCH HTTP_HEADER_HOSTNAME_MATCH, protocol, hostname ) == 2 ) { | 1198 | else if ( sscanf ( header, HTTP_HEADER_LOCATION_MATCH HTTP_HEADER_PROTOCOL_MATCH HTTP_HEADER_HOSTNAME_MATCH, protocol, hostname ) == 2 ) { |
1199 | asprintf( &server_hostname, "%s", hostname ); | 1199 | xasprintf( &server_hostname, "%s", hostname ); |
1200 | asprintf( &server_host, "%s", hostname ); | 1200 | xasprintf( &server_host, "%s", hostname ); |
1201 | use_ssl = chk_protocol(protocol); | 1201 | use_ssl = chk_protocol(protocol); |
1202 | server_port = protocol_std_port(use_ssl); | 1202 | server_port = protocol_std_port(use_ssl); |
1203 | asprintf( &http_url_path, "%s", DEFAULT_HTTP_URL_PATH ); | 1203 | xasprintf( &http_url_path, "%s", DEFAULT_HTTP_URL_PATH ); |
1204 | } | 1204 | } |
1205 | else if ( sscanf ( header, HTTP_HEADER_LOCATION_MATCH HTTP_HEADER_URL_PATH_MATCH, url_path ) == 1 ) { | 1205 | else if ( sscanf ( header, HTTP_HEADER_LOCATION_MATCH HTTP_HEADER_URL_PATH_MATCH, url_path ) == 1 ) { |
1206 | /* check for relative url and prepend path if necessary */ | 1206 | /* check for relative url and prepend path if necessary */ |
1207 | if ( ( url_path[0] != '/' ) && ( orig_url_dirname = strrchr( orig_url_path, '/' ) ) ) { | 1207 | if ( ( url_path[0] != '/' ) && ( orig_url_dirname = strrchr( orig_url_path, '/' ) ) ) { |
1208 | *orig_url_dirname = '\0'; | 1208 | *orig_url_dirname = '\0'; |
1209 | asprintf( &http_url_path, "%s%s", orig_url_path, url_path ); | 1209 | xasprintf( &http_url_path, "%s%s", orig_url_path, url_path ); |
1210 | } else { | 1210 | } else { |
1211 | asprintf( &http_url_path, "%s", url_path ); | 1211 | xasprintf( &http_url_path, "%s", url_path ); |
1212 | } | 1212 | } |
1213 | return STATE_DEPENDENT; | 1213 | return STATE_DEPENDENT; |
1214 | } | 1214 | } |
@@ -1218,7 +1218,7 @@ prepare_follow_redirect( struct pageref *page ) | |||
1218 | 1218 | ||
1219 | 1219 | ||
1220 | /* default return value is STATE_DEPENDENT to continue looping in main() */ | 1220 | /* default return value is STATE_DEPENDENT to continue looping in main() */ |
1221 | asprintf( &msg, "% %: % - Could not find redirect Location", | 1221 | xasprintf( &msg, "% %: % - Could not find redirect Location", |
1222 | protocol_text( use_ssl ), | 1222 | protocol_text( use_ssl ), |
1223 | state_text( STATE_UNKNOWN ), | 1223 | state_text( STATE_UNKNOWN ), |
1224 | page->status ); | 1224 | page->status ); |
@@ -1239,24 +1239,24 @@ https_request( SSL_CTX *ctx, SSL *ssl, struct pageref *page ) | |||
1239 | size_t size = 0; | 1239 | size_t size = 0; |
1240 | char *basic_auth_encoded = NULL; | 1240 | char *basic_auth_encoded = NULL; |
1241 | 1241 | ||
1242 | asprintf( &buffer, HTTP_TEMPLATE_REQUEST, buffer, http_method, http_url_path ); | 1242 | xasprintf( &buffer, HTTP_TEMPLATE_REQUEST, buffer, http_method, http_url_path ); |
1243 | 1243 | ||
1244 | asprintf( &buffer, HTTP_TEMPLATE_HEADER_USERAGENT, buffer, progname, REVISION, PACKAGE_VERSION ); | 1244 | xasprintf( &buffer, HTTP_TEMPLATE_HEADER_USERAGENT, buffer, progname, REVISION, PACKAGE_VERSION ); |
1245 | 1245 | ||
1246 | if ( use_server_hostname ) { | 1246 | if ( use_server_hostname ) { |
1247 | asprintf( &buffer, HTTP_TEMPLATE_HEADER_HOST, buffer, server_hostname ); | 1247 | xasprintf( &buffer, HTTP_TEMPLATE_HEADER_HOST, buffer, server_hostname ); |
1248 | } | 1248 | } |
1249 | 1249 | ||
1250 | if ( use_basic_auth ) { | 1250 | if ( use_basic_auth ) { |
1251 | basic_auth_encoded = base64( basic_auth, strlen( basic_auth ) ); | 1251 | basic_auth_encoded = base64( basic_auth, strlen( basic_auth ) ); |
1252 | asprintf( &buffer, HTTP_TEMPLATE_HEADER_AUTH, buffer, basic_auth_encoded ); | 1252 | xasprintf( &buffer, HTTP_TEMPLATE_HEADER_AUTH, buffer, basic_auth_encoded ); |
1253 | } | 1253 | } |
1254 | 1254 | ||
1255 | /* either send http POST data */ | 1255 | /* either send http POST data */ |
1256 | if ( use_http_post_data ) { | 1256 | if ( use_http_post_data ) { |
1257 | asprintf( &buffer, "%sContent-Type: application/x-www-form-urlencoded\r\n", buffer ); | 1257 | xasprintf( &buffer, "%sContent-Type: application/x-www-form-urlencoded\r\n", buffer ); |
1258 | asprintf( &buffer, "%sContent-Length: %i\r\n\r\n", buffer, content_len ); | 1258 | xasprintf( &buffer, "%sContent-Length: %i\r\n\r\n", buffer, content_len ); |
1259 | asprintf( &buffer, "%s%s%s", buffer, http_post_data, "\r\n" ); | 1259 | xasprintf( &buffer, "%s%s%s", buffer, http_post_data, "\r\n" ); |
1260 | sendsize = SSL_write( ssl, buffer, strlen( buffer ) ); | 1260 | sendsize = SSL_write( ssl, buffer, strlen( buffer ) ); |
1261 | switch ( SSL_get_error( ssl, sendsize ) ) { | 1261 | switch ( SSL_get_error( ssl, sendsize ) ) { |
1262 | case SSL_ERROR_NONE: | 1262 | case SSL_ERROR_NONE: |
@@ -1270,7 +1270,7 @@ https_request( SSL_CTX *ctx, SSL *ssl, struct pageref *page ) | |||
1270 | /* or just a newline */ | 1270 | /* or just a newline */ |
1271 | } else { | 1271 | } else { |
1272 | 1272 | ||
1273 | asprintf( &buffer, "%s\r\n", buffer ); | 1273 | xasprintf( &buffer, "%s\r\n", buffer ); |
1274 | sendsize = SSL_write( ssl, buffer, strlen( buffer ) ); | 1274 | sendsize = SSL_write( ssl, buffer, strlen( buffer ) ); |
1275 | switch ( SSL_get_error( ssl, sendsize ) ) { | 1275 | switch ( SSL_get_error( ssl, sendsize ) ) { |
1276 | case SSL_ERROR_NONE: | 1276 | case SSL_ERROR_NONE: |
@@ -1293,7 +1293,7 @@ https_request( SSL_CTX *ctx, SSL *ssl, struct pageref *page ) | |||
1293 | case SSL_ERROR_NONE: | 1293 | case SSL_ERROR_NONE: |
1294 | if ( recvsize > (size_t) 0 ) { | 1294 | if ( recvsize > (size_t) 0 ) { |
1295 | recvbuff[recvsize] = '\0'; | 1295 | recvbuff[recvsize] = '\0'; |
1296 | asprintf( &content, "%s%s", content, recvbuff ); | 1296 | xasprintf( &content, "%s%s", content, recvbuff ); |
1297 | size += recvsize; | 1297 | size += recvsize; |
1298 | } | 1298 | } |
1299 | break; | 1299 | break; |
@@ -1317,7 +1317,7 @@ https_request( SSL_CTX *ctx, SSL *ssl, struct pageref *page ) | |||
1317 | } | 1317 | } |
1318 | } while ( recvsize > (size_t) 0 ); | 1318 | } while ( recvsize > (size_t) 0 ); |
1319 | 1319 | ||
1320 | asprintf( &page->content, "%s", content ); | 1320 | xasprintf( &page->content, "%s", content ); |
1321 | page->size = size; | 1321 | page->size = size; |
1322 | 1322 | ||
1323 | /* return a CRITICAL status if we couldn't read any data */ | 1323 | /* return a CRITICAL status if we couldn't read any data */ |
@@ -1446,7 +1446,7 @@ check_server_certificate_hostname( ) | |||
1446 | char *msg = NULL; | 1446 | char *msg = NULL; |
1447 | X509_NAME_get_text_by_NID( X509_get_subject_name( server_certificate ), NID_commonName, server_CN, 256 ); | 1447 | X509_NAME_get_text_by_NID( X509_get_subject_name( server_certificate ), NID_commonName, server_CN, 256 ); |
1448 | if ( strcasecmp( server_CN, server_hostname ) ) { | 1448 | if ( strcasecmp( server_CN, server_hostname ) ) { |
1449 | asprintf( &msg, "SSL ERROR: Server Certificate does not match Hostname %s.\n", server_hostname ); | 1449 | xasprintf( &msg, "SSL ERROR: Server Certificate does not match Hostname %s.\n", server_hostname ); |
1450 | ssl_terminate( STATE_WARNING, msg ); | 1450 | ssl_terminate( STATE_WARNING, msg ); |
1451 | } | 1451 | } |
1452 | 1452 | ||
@@ -1507,20 +1507,20 @@ check_server_certificate_expires( ) | |||
1507 | stamp.tm_hour, stamp.tm_min ); | 1507 | stamp.tm_hour, stamp.tm_min ); |
1508 | 1508 | ||
1509 | if ( ( days_left > 0 ) && ( days_left <= server_certificate_min_days_valid ) ) { | 1509 | if ( ( days_left > 0 ) && ( days_left <= server_certificate_min_days_valid ) ) { |
1510 | asprintf( &msg, "Certificate expires in %d day(s) (%s).\n", days_left, timestamp ); | 1510 | xasprintf( &msg, "Certificate expires in %d day(s) (%s).\n", days_left, timestamp ); |
1511 | ssl_terminate( STATE_WARNING, msg ); | 1511 | ssl_terminate( STATE_WARNING, msg ); |
1512 | } | 1512 | } |
1513 | if ( days_left < 0 ) { | 1513 | if ( days_left < 0 ) { |
1514 | asprintf( &msg, "Certificate expired on %s.\n", timestamp ); | 1514 | xasprintf( &msg, "Certificate expired on %s.\n", timestamp ); |
1515 | ssl_terminate( STATE_CRITICAL, msg ); | 1515 | ssl_terminate( STATE_CRITICAL, msg ); |
1516 | } | 1516 | } |
1517 | 1517 | ||
1518 | if (days_left == 0) { | 1518 | if (days_left == 0) { |
1519 | asprintf( &msg, "Certificate expires today (%s).\n", timestamp ); | 1519 | xasprintf( &msg, "Certificate expires today (%s).\n", timestamp ); |
1520 | ssl_terminate( STATE_WARNING, msg ); | 1520 | ssl_terminate( STATE_WARNING, msg ); |
1521 | } | 1521 | } |
1522 | 1522 | ||
1523 | asprintf( &msg, "Certificate will expire on %s.\n", timestamp ); | 1523 | xasprintf( &msg, "Certificate will expire on %s.\n", timestamp ); |
1524 | ssl_terminate( STATE_OK, msg ); | 1524 | ssl_terminate( STATE_OK, msg ); |
1525 | } | 1525 | } |
1526 | #endif | 1526 | #endif |