function unigmaGetTxt() { local domain="$1" local raw raw=$(dig +short +time=2 +tries=1 TXT "$domain.settings.wedos-int.dev" 2>/dev/null) [[ -n "$raw" ]] || return 1 printf '%s\n' "$raw" | tr -d '"' | tr '\n' ' ' } function unigmaParse() { local raw="$1" UNIGMA_PHP="" UNIGMA_MEM="" UNIGMA_EXEC="" local IFS=';' pair key value for pair in $raw; do pair="$(sed 's/^[[:space:]]*//;s/[[:space:]]*$//' <<< "$pair")" [[ -z "$pair" || "$pair" != *"="* ]] && continue key="$(sed 's/^[[:space:]]*//;s/[[:space:]]*$//' <<< "${pair%%=*}")" value="$(sed 's/^[[:space:]]*//;s/[[:space:]]*$//' <<< "${pair#*=}")" case "$key" in php) UNIGMA_PHP="$value" ;; mem|memory_limit) UNIGMA_MEM="$value" ;; exec|max_execution_time) UNIGMA_EXEC="$value" ;; esac done } function unigmaIniSet() { local domain="$1" local mem="$2" local exec="$3" local file content="" existing uid gid [[ -n "$mem" || -n "$exec" ]] || return 0 uid=$(domainToUid "$domain") [[ -n "$uid" ]] || { appError "Cannot resolve UID for: $domain"; return 1; } gid=$(domainToUid "$domain") [[ -n "$gid" ]] || { appError "Cannot resolve GID for: $domain"; return 1; } [[ -n "$mem" ]] && content+="memory_limit = ${mem}"$'\n' [[ -n "$exec" ]] && content+="max_execution_time = ${exec}"$'\n' file="$olsPrivatePath/$domain/php/01-ols-private.ini" # no change existing="$(cat "$file" 2>/dev/null || true)" [[ "${content%$'\n'}" == "$existing" ]] && return 0 fileAtomicWrite "$file" "$content" chown -- "$uid:$gid" "$file" || { appError "Change owner of file: $file"; return 1; } return 2 } function unigmaPhpSet() { local domain="$1" local php="$2" local path="$olsVhostsPath/$domain/www" [[ -d "$path" ]] || { appError "Directory not found: $path"; return 1; } local uid gid uid=$(domainToUid "$domain") [[ -n "$uid" ]] || { appError "Cannot resolve UID for: $domain"; return 1; } gid=$(domainToGid "$domain") [[ -n "$gid" ]] || { appError "Cannot resolve GID for: $domain"; return 1; } if [[ -z "$php" ]]; then find "$path" -maxdepth 1 -type f -name '.php[1-9][0-9]' -delete return 0 fi local suffix="${php//./}" [[ "$suffix" =~ ^[1-9][0-9]$ ]] || { appError "Incorrect PHP version: $php"; return 1; } # target local target="$path/.php$suffix" # find files .phpXX local -a current mapfile -t current < <(find "$path" -maxdepth 1 -type f -name '.php[1-9][0-9]') if [[ ${#current[@]} -eq 0 ]]; then touch "$target" chown -- "$uid:$gid" "$target" || true return 0 fi # no change if [[ ${#current[@]} -eq 1 && "${current[0]}" == "$target" ]]; then return 0 fi # rename (atomic substitution) mv -f "${current[0]}" "$target" chown -- "$uid:$gid" "$target" || true # remove other files .phpXX if [[ ${#current[@]} -gt 1 ]]; then local i for ((i = 1; i < ${#current[@]}; i++)); do rm -f "${current[i]}" done fi } function unigmaUpdate() { local domain="$1" local raw raw="$(unigmaGetTxt "$domain")" || return 0 unigmaParse "$raw" unigmaIniSet "$domain" "$UNIGMA_MEM" "$UNIGMA_EXEC" unigmaPhpSet "$domain" "$UNIGMA_PHP" }