#!/bin/bash # Create an empty file with the correct owner FOR ITS LOCATION. # under /docker/containers// -> app data, owned by the docker install # user -> create via runFileOp. # anywhere else -> manager control plane -> runInstallOp # (the current/manager user). # Creating the file directly as the right owner avoids chown-to-another-user, # which needs real root and isn't available to the unprivileged runtime. # $2 (user_name) is kept for call-site compatibility but is now advisory — the # path decides the owner, so a stale hint (e.g. passing the manager user for a # file that lives under containers/) no longer lands the file with the wrong # owner. Parent dirs are created with the same owner. createTouch() { local file="$1" local user_name="$2" # advisory; location determines the real owner local silent_flag="$3" local clean_file=$(echo "$file" | sed 's#//*#/#g') local file_name=$(basename "$clean_file") local file_dir=$(dirname "$clean_file") local op="runInstallOp" if [[ "$clean_file" == "$containers_dir"* || "$clean_file" == "${LP_CONTAINERS_DIR:-/libreportal-containers}"/* ]]; then op="runFileOp" fi if [ "$silent_flag" == "silent" ]; then $op mkdir -p "$file_dir" 2>/dev/null $op touch "$clean_file" else local result=$($op mkdir -p "$file_dir") local result=$($op touch "$clean_file") checkSuccess "Touching $file_name" fi }