From 9ff99701df24cc2ffa76531f02a6e08a21c630f4 Mon Sep 17 00:00:00 2001 From: alinmear Date: Thu, 16 Feb 2017 21:28:08 +0100 Subject: [PATCH] Add method overwrite_config() This method takes 2 arguments: 1.) Environment Variable Prefix 2.) String of files separated by whitespace e.g. export LDAP_SEARCH_BASE=dc=domain,dc=loc export LDAP_BIND_PW=test overwrite_config "LDAP_" "/etc/postfix/ldap-users.cf /etc/postfix/ldap-groups.cf" Logic: + all env vars will be search for vars with the prefix LDAP_ + afterwards they will be dissembled in key value pairs LDAP_BIND_PW=test --> bind_pw test + the key and value will be substituted within the provided files via sed --- target/start-mailserver.sh | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/target/start-mailserver.sh b/target/start-mailserver.sh index cfe6efbf..ed12485b 100644 --- a/target/start-mailserver.sh +++ b/target/start-mailserver.sh @@ -315,6 +315,49 @@ function display_startup_daemon() { return $res } +function overwrite_config() { + echo -e "Starting do do overwrites" + declare -A config_overwrites + + _env_variable_prefix=$1 + [ -z ${_env_variable_prefix} ] && return 1 + + + IFS=" " read -r -a _config_files <<< $2 + + # dispatch env variables + for env_variable in $(printenv | grep $_env_variable_prefix);do + # get key + # IFS not working because values like ldap_query_filter or search base consists of several '=' + # IFS="=" read -r -a __values <<< $env_variable + # key="${__values[0]}" + # value="${__values[1]}" + key=$(echo $env_variable | cut -d "=" -f1) + key=${key#"${_env_variable_prefix}"} + # make key lowercase + key=${key,,} + # get value + value=$(echo $env_variable | cut -d "=" -f2-) + + config_overwrites[$key]=$value + done + + for f in "${_config_files[@]}" + do + if [ ! -f "${f}" ];then + echo "Can not find ${f}. Skipping overwrite" + else + for key in ${!config_overwrites[@]} + do + [ -z $key ] && echo -e "\t no key provided" && return 1 + + sed -i -e "s|^${key}[[:space:]]\+.*|${key} = "${config_overwrites[$key]}'|g' \ + ${f} + done + fi + done +} + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # ! CARE --> DON'T CHANGE, except you know exactly what you are doing # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!