161 lines
4.9 KiB
Bash
161 lines
4.9 KiB
Bash
# Function to check if value is well configured in conf file
|
|
#
|
|
# Parameters
|
|
# - 1 : name of service (ex : SSH)
|
|
# - 2 : config file (ex : /etc/ssh/sshd_config)
|
|
# - 3 : name of param key (ex : ListenAddress)
|
|
# - 4 : expected pattern to search without start and end spaces, can be multiple (ex : ${IPV4_ADMIN_LAN_IP} ${IPV6_ADMIN_LAN_IP})
|
|
# Note for 4th parameter, if there is a space in one param, you can use regex like [[:space::]]
|
|
#
|
|
# Return = 0 -> OK value is set
|
|
# Return = 1 -> Error (wrong number of param or other)
|
|
# Return = 2 -> Unexpected value is set
|
|
# Return = 3 -> All expected values are NOT configured
|
|
|
|
check_value_in_conf_file () {
|
|
|
|
# Check the number of parameters
|
|
if [ ${#} -ne 4 ]
|
|
then
|
|
echo -e "${RED}ERROR : when call check_value_in_conf_file function, bad parameters number expected : 4.${NC}\n"
|
|
return 1
|
|
fi
|
|
|
|
# Check if on param is empty or just contains space(s)
|
|
if [[ -z "${1// }" ]] || [[ -z "${2// }" ]] || [[ -z "${3// }" ]] || [[ -z "${4// }" ]]
|
|
then
|
|
echo -e "${RED}ERROR : at least one parameter is empty, please provide all required params.${NC}\n"
|
|
return 1
|
|
fi
|
|
|
|
# Get parameters and delete 'start' en 'end' spaces. For name conf_file
|
|
local name=$(echo -e ${1} | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | sed -e 's/[[:space:]]/[[:space:]]*/g')
|
|
local conf_file=$(echo -e ${2} | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | sed -e 's/[[:space:]]/[[:space:]]*/g')
|
|
local param_key=$(echo -e ${3} | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | sed -e 's/[[:space:]]/[[:space:]]*/g')
|
|
local search_ok=$(echo -e ${4} | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
|
|
|
# Check if conf file exist
|
|
if [[ ! -f "${conf_file}" ]]
|
|
then
|
|
echo -e "${RED}ERROR : file ${conf_file} NOT FOUND.${NC}\n"
|
|
return 1
|
|
fi
|
|
|
|
# Print message to explain this check
|
|
echo -e "Check ${BLUE}${name} ${param_key}${NC} config file ${conf_file} ..."
|
|
|
|
# If multiple expected values
|
|
local list_search_ok=(${search_ok})
|
|
local search_ok_to_grep="^[[:space:]]*"${param_key}"[[:space:]]*:\?=\?[[:space:]]*"${search_ok}"[[:space:]]*$"
|
|
|
|
# If there is more than one unexpected values
|
|
if [ ${#list_search_ok[@]} -gt 1 ]
|
|
then
|
|
search_ok_to_grep=""
|
|
for var_search_ok in ${list_search_ok[@]}
|
|
do
|
|
|
|
search_ok_to_grep=${search_ok_to_grep}'-e '"^[[:space:]]*${param_key}[[:space:]]*:\?=\?[[:space:]]*${var_search_ok}[[:space:]]*$"' '
|
|
done
|
|
fi
|
|
|
|
# Check if unexpected value is set (grep -v) (success if return code = 1)
|
|
grep "^[[:space:]]*"${param_key} ${conf_file} | grep -q -v ${search_ok_to_grep}
|
|
|
|
# Return Code
|
|
local RC=${?}
|
|
|
|
# Unexpected value is set
|
|
if [ ${RC} -eq 0 ]
|
|
then
|
|
echo -e "${RED}Service ${name} has BAD CONFIGURATION for ${param_key} : check KO${NC}\n"
|
|
return 2
|
|
# Unexpected value is not set
|
|
else
|
|
|
|
search_ok_to_grep="^[[:space:]]*"${param_key}"[[:space:]]*:\?=\?[[:space:]]*"${search_ok}"[[:space:]]*$"
|
|
|
|
# Boolean for final Return Code, if one return code in the loop -ne 0 -> set finalRC=1
|
|
local finalRC=0
|
|
|
|
# If there is more than one OK values
|
|
if [ ${#list_search_ok[@]} -gt 1 ]
|
|
then
|
|
for var_search_ok in ${list_search_ok[@]}
|
|
do
|
|
grep -q "^[[:space:]]*"${param_key}"[[:space:]]*:\?=\?[[:space:]]*"${var_search_ok}"[[:space:]]*$" ${conf_file}
|
|
|
|
RC=${?}
|
|
|
|
if [ ${RC} -ne 0 ]
|
|
then
|
|
finalRC=1
|
|
fi
|
|
|
|
done
|
|
|
|
# Else : do classical check
|
|
else
|
|
# Check if OK value is set (success if return code = 0)
|
|
grep -q "^[[:space:]]*"${param_key}"[[:space:]]*:\?=\?[[:space:]]*"${search_ok}"[[:space:]]*$" ${conf_file}
|
|
|
|
# Return Code
|
|
finalRC=${?}
|
|
fi
|
|
|
|
# All expected values are not configured
|
|
if [ ${finalRC} -ne 0 ]
|
|
then
|
|
echo -e "${RED}Service ${name} has BAD CONFIGURATION for ${param_key} : check KO${NC}\n"
|
|
return 3
|
|
# OK value is set
|
|
else
|
|
echo -e "${GREEN}Service ${name} has GOOD CONFIGURATION for ${param_key} : check OK${NC}\n"
|
|
return 0
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Function to print title
|
|
#
|
|
# Parameter
|
|
# - 1 : title to print (ex : SSH)
|
|
#
|
|
# Return = 0 -> OK value is set
|
|
# Return = 1 -> Error (wrong number of param or other)
|
|
print_config_title () {
|
|
|
|
# Check the number of parameters
|
|
if [ ${#} -ne 1 ]
|
|
then
|
|
echo -e "ERROR : when call print_config_title function, one parameter (only one) expected.\n"
|
|
return 1
|
|
fi
|
|
|
|
# Get title param
|
|
title=${1}
|
|
basic_len=48
|
|
|
|
# Find number of "-" for title
|
|
title_len=$(echo -n " ${title} " | wc -c)
|
|
modulo2=$((${title_len} % 2))
|
|
|
|
# Echo title with 48 chars
|
|
echo "------------------------------------------------"
|
|
# If title_len <= 48
|
|
if [ ${title_len} -lt ${basic_len} ]
|
|
then
|
|
final_left_len=$(( (${basic_len}-(${title_len}-${modulo2}))/2))
|
|
final_right_len=$(( ${final_left_len}-${modulo2} ))
|
|
printf %${final_left_len}s | tr " " "-"
|
|
echo -n -e " ${BLUE}${title}${NC} "
|
|
printf %${final_right_len}s | tr " " "-"
|
|
else
|
|
echo -e -n " ${BLUE}CHECK ${title} CONFIG${NC}"
|
|
|
|
fi
|
|
echo -e "\n------------------------------------------------\n"
|
|
return 0
|
|
}
|
|
|
|
|