mirror of
				https://github.com/drwetter/testssl.sh.git
				synced 2025-10-31 07:40:58 +01:00 
			
		
		
		
	Let testssl.sh create HTML file name
Add option for testssl.sh to create the HTML file name. If testssl.sh creates the file name, then, in the case of mass testing, a separate HTML file is created for each test (i.e., for each line in the file provided to `--file`).
This commit is contained in:
		
							parent
							
								
									61b5539ca6
								
							
						
					
					
						commit
						308b24cbe9
					
				
							
								
								
									
										46
									
								
								testssl.sh
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								testssl.sh
									
									
									
									
									
								
							| @ -569,7 +569,7 @@ html_reserved(){ | ||||
| 
 | ||||
| # a little bit of sanitzing with bash internal search&replace -- otherwise printf will hiccup at '%' and '--' does the rest. | ||||
| out_html() { | ||||
|      "$do_html" && printf -- "%b" "${1//%/%%}" >> "$HTMLFILE" | ||||
|      "$do_html" && [[ -n "$HTMLFILE" ]] && [[ ! -d "$HTMLFILE" ]] && printf -- "%b" "${1//%/%%}" >> "$HTMLFILE" | ||||
| } | ||||
| 
 | ||||
| out() { | ||||
| @ -975,8 +975,17 @@ fileout() { # ID, SEVERITY, FINDING, CVE, CWE, HINT | ||||
| ################### FILE FORMATING END ######################### | ||||
| 
 | ||||
| html_header() { | ||||
|      local fname_prefix="$1" | ||||
| 
 | ||||
|      if "$HTMLHEADER"; then | ||||
|           [[ -z "$fname_prefix" ]] && fname_prefix="$NODE"_"$PORT" | ||||
|           if [[ -n "$HTMLFILE" ]] && [[ ! -d "$HTMLFILE" ]]; then | ||||
|                rm -f "$HTMLFILE" | ||||
|           elif [[ -z "$HTMLFILE" ]]; then | ||||
|                HTMLFILE=$fname_prefix-$(date +"%Y%m%d-%H%M".html) | ||||
|           else | ||||
|                HTMLFILE=$HTMLFILE/$fname_prefix-$(date +"%Y%m%d-%H%M".html) | ||||
|           fi | ||||
|           out_html "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" | ||||
|           out_html "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" | ||||
|           out_html "<!-- This file was created with testssl.sh. https://testssl.sh -->\n" | ||||
| @ -991,6 +1000,15 @@ html_header() { | ||||
|      return 0 | ||||
| } | ||||
| 
 | ||||
| html_banner() { | ||||
|      if "$QUIET" && "$HTMLHEADER"; then | ||||
|           out_html "## Scan started as: \"$PROG_NAME $CMDLINE\"\n" | ||||
|           out_html "## at $HNAME:$OPENSSL_LOCATION\n" | ||||
|           out_html "## version testssl: $VERSION ${GIT_REL_SHORT:-$CVS_REL_SHORT} from $REL_DATE\n" | ||||
|           out_html "## version openssl: \"$OSSL_VER\" from \"$OSSL_BUILD_DATE\")\n\n" | ||||
|      fi | ||||
| } | ||||
| 
 | ||||
| html_footer() { | ||||
|      if "$HTMLHEADER"; then | ||||
|           out_html "</pre>\n" | ||||
| @ -11374,6 +11392,7 @@ file output options (can also be preset via environment variables): | ||||
|      --jsonfile-pretty <jsonfile>  additional pretty structured output as JSON to the specified file | ||||
|      --csv                         additional output of findings to CSV file <NODE-YYYYMMDD-HHMM.csv> in cwd | ||||
|      --csvfile <csvfile>           additional output as CSV to the specified file | ||||
|      --html                        additional output as HTML to file <NODE-YYYYMMDD-HHMM.html> | ||||
|      --htmlfile <htmlfile>         additional output as HTML to the specifed file | ||||
|      --hints                       additional hints to findings | ||||
|      --severity <severity>         severities with lower level will be filtered for CSV+JSON, possible values <LOW|MEDIUM|HIGH|CRITICAL> | ||||
| @ -12356,10 +12375,12 @@ run_mass_testing_parallel() { | ||||
| run_mass_testing() { | ||||
|      local cmdline="" | ||||
|      local global_cmdline=${CMDLINE%%--file*} | ||||
|      local html_header="" | ||||
| 
 | ||||
|      if [[ ! -r "$FNAME" ]] && "$IKNOW_FNAME"; then | ||||
|           fatal "Can't read file \"$FNAME\"" "2" | ||||
|      fi | ||||
|      [[ -n "$HTMLFILE" ]] && [[ ! -d "$HTMLFILE" ]] && html_header="--no-html-header" | ||||
| 
 | ||||
|      pr_reverse "====== Running in file batch mode with file=\"$FNAME\" ======"; outln "\n" | ||||
|      APPEND=false # Make sure we close out our files | ||||
| @ -12367,7 +12388,7 @@ run_mass_testing() { | ||||
|           cmdline=$(filter_input "$cmdline") | ||||
|           [[ -z "$cmdline" ]] && continue | ||||
|           [[ "$cmdline" == "EOF" ]] && break | ||||
|           cmdline="$0 $global_cmdline --warnings=batch -q --no-html-header --append $cmdline" | ||||
|           cmdline="$0 $global_cmdline --warnings=batch -q $html_header --append $cmdline" | ||||
|           draw_line "=" $((TERM_WIDTH / 2)); outln; | ||||
|           outln "$cmdline" | ||||
|           $cmdline | ||||
| @ -12783,13 +12804,13 @@ parse_cmd_line() { | ||||
|                     [[ $? -eq 0 ]] && shift | ||||
|                     do_csv=true | ||||
|                     ;; | ||||
|                --html) | ||||
|                     do_html=true | ||||
|                     ;;  # DEFINITION of HTMLFILE is not arg specified: automagically in parse_hn_port() | ||||
|                     # following does the same but we can specify a file location additionally | ||||
|                --htmlfile) | ||||
|                     HTMLFILE=$(parse_opt_equal_sign "$1" "$2") | ||||
|                     [[ $? -eq 0 ]] && shift | ||||
|                     if [[ -d "$HTMLFILE" ]]; then | ||||
|                          pr_warningln_term_term "$HTMLFILE exists and is a directory" | ||||
|                          exit -6 | ||||
|                     fi | ||||
|                     do_html=true | ||||
|                     ;; | ||||
|                --no-html-header) | ||||
| @ -12978,7 +12999,18 @@ lets_roll() { | ||||
| 
 | ||||
| initialize_globals | ||||
| parse_cmd_line "$@" | ||||
| if ! "$do_mass_testing" || ( [[ -n "$HTMLFILE" ]] && [[ ! -d "$HTMLFILE" ]] ); then | ||||
|      if "$do_display_only"; then | ||||
|           html_header "local-ciphers" | ||||
|      elif "$do_mass_testing"; then | ||||
|           html_header | ||||
|      elif "$do_mx_all_ips"; then | ||||
|           html_header "mx-$URI" | ||||
|      else | ||||
|           parse_hn_port "${URI}"    # NODE, URL_PATH, PORT, IPADDR and IP46ADDR is set now | ||||
|           html_header | ||||
|      fi | ||||
| fi | ||||
| get_install_dir | ||||
| set_color_functions | ||||
| maketempf | ||||
| @ -13003,6 +13035,7 @@ if $do_mass_testing; then | ||||
|      exit $? | ||||
| fi | ||||
| 
 | ||||
| html_banner | ||||
| #TODO: there shouldn't be the need for a special case for --mx, only the ip adresses we would need upfront and the do-parser | ||||
| if $do_mx_all_ips; then | ||||
|      query_globals                 # if we have just 1x "do_*" --> we do a standard run -- otherwise just the one specified | ||||
| @ -13010,7 +13043,6 @@ if $do_mx_all_ips; then | ||||
|      run_mx_all_ips "${URI}" $PORT # we should reduce run_mx_all_ips to the stuff neccessary as ~15 lines later we have sililar code | ||||
|      ret=$? | ||||
| else | ||||
|      parse_hn_port "${URI}"                                                     # NODE, URL_PATH, PORT, IPADDR and IP46ADDR is set now | ||||
|      prepare_logging | ||||
|      if ! determine_ip_addresses; then | ||||
|           fatal "No IP address could be determined" 2 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user