@@ -2503,6 +2503,8 @@ service_detection() {
25032503 wait_kill $! $((HEADER_MAXSLEEP * 10))
25042504 was_killed=$?
25052505 fi
2506+ # make sure that we don't have non-printable chars sneaked in -- relevant only in debug mode level 2
2507+ sanitze_http_header $TMPFILE
25062508 head $TMPFILE | grep -aq '^HTTP/' && SERVICE=HTTP
25072509 [[ -z "$SERVICE" ]] && head $TMPFILE | grep -Ewaq "SMTP|ESMTP|Exim|IdeaSmtpServer|Kerio Connect|Postfix" && SERVICE=SMTP # I know some overlap here
25082510 [[ -z "$SERVICE" ]] && head $TMPFILE | grep -Ewaq "POP|POP3|Gpop|OK Dovecot" && SERVICE=POP # I know some overlap here
@@ -2577,7 +2579,9 @@ connectivity_problem() {
25772579 fi
25782580}
25792581
2580-
2582+ # arg1: filename (global)
2583+ # return: sanitzes arg1
2584+ #
25812585sanitze_http_header() {
25822586 # some sed implementations were sometime not fine with HTTP headers containing x0d x0a (CRLF: usual case)
25832587 # Also we use tr here to remove any crtl chars which the server side offers --> possible security problem.
@@ -2636,6 +2640,7 @@ run_http_header() {
26362640 ((NR_HEADER_FAIL++))
26372641 fi
26382642 fi
2643+
26392644 HTTP_TIME=$(awk -F': ' '/^date:/ { print $2 } /^Date:/ { print $2 }' $HEADERFILE)
26402645 HTTP_AGE=$(awk -F': ' '/^[aA][gG][eE]: / { print $2 }' $HEADERFILE)
26412646 if [[ ! -s $HEADERFILE ]]; then
@@ -2663,6 +2668,10 @@ run_http_header() {
26632668 # Populate vars for HTTP time
26642669 [[ -n "$HTTP_AGE" ]] && HTTP_AGE="$(strip_lf "$HTTP_AGE")"
26652670 [[ -n "$HTTP_TIME" ]] && HTTP_TIME="$(strip_lf "$HTTP_TIME")"
2671+ if [[ -n "$HTTP_AGE" ]] && [[ ! "$HTTP_AGE" =~ ^[0-9]+$ ]]; then
2672+ HTTP_AGE="NaN"
2673+ fi
2674+
26662675 debugme echo "NOW_TIME: $NOW_TIME | HTTP_AGE: $HTTP_AGE | HTTP_TIME: $HTTP_TIME"
26672676
26682677 HTTP_STATUS_CODE=$(awk '/^HTTP\// { print $2 }' $HEADERFILE 2>>$ERRFILE)
@@ -2793,13 +2802,20 @@ run_http_date() {
27932802 outln
27942803 pr_bold " HTTP Age"
27952804 out " (RFC 7234) $HTTP_AGE"
2796- fileout "HTTP_headerAge" "INFO" "$HTTP_AGE seconds"
2805+ if [[ "$HTTP_AGE" = NaN ]]; then
2806+ out ", "
2807+ # https://www.rfc-editor.org/rfc/rfc7234#section-1.2.1
2808+ pr_svrty_low "RFC 7234, sec 1.2.1. requires numbers"
2809+ fileout "HTTP_headerAge" "LOW" "$HTTP_AGE was not a non-negative integer, see RFC 7234, sec 1.2.1."
2810+ else
2811+ fileout "HTTP_headerAge" "INFO" "$HTTP_AGE seconds"
2812+ fi
27972813 fi
27982814 else
27992815 out "Got no HTTP time, maybe try different URL?";
28002816 fileout "$jsonID" "INFO" "Got no HTTP time, maybe try different URL?"
28012817 fi
2802- debugme tm_out ", HTTP_TIME + HTTP_AGE in epoch : $HTTP_TIME / $HTTP_AGE"
2818+ debugme tm_out ", HTTP_TIME | HTTP_AGE: $HTTP_TIME | $HTTP_AGE"
28032819 outln
28042820 match_ipv4_httpheader "$1"
28052821 return 0
0 commit comments