#!/bin/sh PRINT_PASSED=2 NGINX_UTIL="/usr/bin/nginx-util" __esc_newlines() { echo "${1}" | sed -E 's/$/\\n/' | tr -d '\n' | sed -E 's/\\n$/\n/' } __esc_sed_rhs() { __esc_newlines "${1}" | sed -E 's/[&/\]/\\&/g' } _sed_rhs() { __esc_sed_rhs "$(echo "${1}" | sed -E "s/[$]/$(__esc_sed_rhs "${2}")/g")" } __esc_regex() { __esc_newlines "${1}" | sed -E 's/[^^_a-zA-Z0-9-]/[&]/g; s/\^/\\^/g' } _regex() { __esc_regex "${1}" | sed -E -e 's/^(\[\s])*/^\\s*/' \ -e 's/(\[\s])+\[[*]]/(\\s.*)?/g' \ -e 's/(\[\s])+/\\s+/g' \ -e 's/(\[\s])*\[[;]]/\\s*;/g' \ -e "s/\[['\"]]/['\"]?/g" \ -e "s/\[[$]]/$(__esc_sed_rhs "$(__esc_regex "${2}")")/g" } _echo_sed() { echo "" | sed -E "c${1}" } setpoint_add_ssl() { local indent="\n$1" local name="$2" local default="" [ "${name}" = "${LAN_NAME}" ] && default=".default" local prefix="${CONF_DIR}${name}" local CONF="$(grep -vE "$(_regex "${NGX_INCLUDE}" \ "${LAN_LISTEN}${default}")" "${prefix}.sans" 2>/dev/null)" local ADDS="" echo "${CONF}" \ | grep -qE "$(_regex "${NGX_INCLUDE}" "${LAN_SSL_LISTEN}${default}")" \ || ADDS="${ADDS}${indent}$(_sed_rhs "${NGX_INCLUDE}" \ "${LAN_SSL_LISTEN}${default}")" echo "${CONF}" | grep -qE "$(_regex "${NGX_SSL_CRT}" "${prefix}")" \ || ADDS="${ADDS}${indent}$(_sed_rhs "${NGX_SSL_CRT}" "${prefix}")" echo "${CONF}" | grep -qE "$(_regex "${NGX_SSL_KEY}" "${prefix}")" \ || ADDS="${ADDS}${indent}$(_sed_rhs "${NGX_SSL_KEY}" "${prefix}")" echo "${CONF}" | grep -qE "^\s*ssl_session_cache\s" \ || ADDS="${ADDS}${indent}$(_sed_rhs "${NGX_SSL_SESSION_CACHE}" "${name}")" echo "${CONF}" | grep -qE "^\s*ssl_session_timeout\s" \ || ADDS="${ADDS}${indent}$(_sed_rhs "${NGX_SSL_SESSION_TIMEOUT}" "")" if [ -n "${ADDS}" ] then ADDS="$(echo "${ADDS}" | sed -E 's/^\\n//')" echo "${CONF}" | grep -qE "$(_regex "${NGX_SERVER_NAME}" "${name}")" \ && echo "${CONF}" \ | sed -E "/$(_regex "${NGX_SERVER_NAME}" "${name}")/a\\${ADDS}" \ > "${prefix}.with" \ && _echo_sed "Added directives to ${prefix}.with:\n${ADDS}" \ && return 0 \ || _echo_sed "Cannot add directives to ${prefix}.sans, missing:\ \n$(_sed_rhs "${NGX_SERVER_NAME}" "${name}")\n${ADDS}" return 1 fi return 0 } # ---------------------------------------------------------------------------- test_setpoint() { [ "$(cat "$1")" = "$2" ] && return echo "$1:"; cat "$1" echo "differs from setpoint:"; echo "$2" [ "${PRINT_PASSED}" -gt 1 ] && pst_exit 1 } test() { eval "$1 2>/dev/null >/dev/null" if [ "$?" -eq "$2" ] then [ "${PRINT_PASSED}" -gt 0 ] \ && printf "%-72s%-1s\n" "$1" "2>/dev/null >/dev/null (-> $2?) passed." else printf "%-72s%-1s\n" "$1" "2>/dev/null >/dev/null (-> $2?) failed!!!" [ "${PRINT_PASSED}" -gt 1 ] && exit 1 fi } [ "$PRINT_PASSED" -gt 0 ] && printf "\nTesting %s get_env ...\n" "${NGINX_UTIL}" eval $("${NGINX_UTIL}" get_env) test '[ -n "${NGINX_CONF}" ]' 0 test '[ -n "${CONF_DIR}" ]' 0 test '[ -n "${LAN_NAME}" ]' 0 test '[ -n "${LAN_LISTEN}" ]' 0 test '[ -n "${LAN_SSL_LISTEN}" ]' 0 test '[ -n "${SSL_SESSION_CACHE_ARG}" ]' 0 test '[ -n "${SSL_SESSION_TIMEOUT_ARG}" ]' 0 test '[ -n "${ADD_SSL_FCT}" ]' 0 [ "$PRINT_PASSED" -gt 0 ] && printf "\nPrepare files in %s ...\n" "${CONF_DIR}" mkdir -p "${CONF_DIR}" cd "${CONF_DIR}" || exit 2 NGX_INCLUDE="include '\$';" NGX_SERVER_NAME="server_name * '\$' *;" NGX_SSL_CRT="ssl_certificate '\$.crt';" NGX_SSL_KEY="ssl_certificate_key '\$.key';" NGX_SSL_SESSION_CACHE="ssl_session_cache '$(echo "${SSL_SESSION_CACHE_ARG}" \ | sed -E "s/$(__esc_regex "${LAN_NAME}")/\$/")';" NGX_SSL_SESSION_TIMEOUT="ssl_session_timeout '${SSL_SESSION_TIMEOUT_ARG}';" cat > "${LAN_NAME}.sans" < minimal.sans < normal.sans < more_server.sans < more_names.sans < different_name.sans < comments.sans < name_comment.sans < tab.sans <