| New file |
| | |
| | | #!/bin/sh |
| | | # |
| | | # The contents of this file are subject to the terms of the Common Development and |
| | | # Distribution License (the License). You may not use this file except in compliance with the |
| | | # License. |
| | | # |
| | | # You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the |
| | | # specific language governing permission and limitations under the License. |
| | | # |
| | | # When distributing Covered Software, include this CDDL Header Notice in each file and include |
| | | # the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL |
| | | # Header, with the fields enclosed by brackets [] replaced by your own identifying |
| | | # information: "Portions copyright [year] [name of copyright owner]". |
| | | # |
| | | # Copyright 2026 3A Systems, LLC. |
| | | |
| | | set -eu |
| | | root=$(CDPATH= cd -- "$(dirname "$0")/../.." && pwd) |
| | | test_dir=$(mktemp -d "${TMPDIR:-/tmp}/opendj-script-util.XXXXXX") |
| | | trap 'rm -rf "$test_dir"' 0 |
| | | |
| | | INSTALL_ROOT=$test_dir |
| | | INSTANCE_ROOT=$test_dir |
| | | SCRIPT_UTIL_CMD= |
| | | SCRIPT_NAME=setup |
| | | . "$root/opendj-server-legacy/resource/bin/_script-util.sh" |
| | | |
| | | mkdir "$test_dir/tmp" "$test_dir/home" |
| | | OPENDJ_TMP_DIR=$test_dir/tmp |
| | | HOME=$test_dir/home |
| | | OPENDJ_JAVA_ARGS= |
| | | |
| | | # On an executable filesystem, the real probe must succeed without shell errors |
| | | # or leaking its scratch variables into the caller. |
| | | res=caller |
| | | DIR_TO_TEST=$test_dir/caller |
| | | TMP_FILE=$test_dir/caller-file |
| | | remove_dir=caller |
| | | if ! set_bc_dir >"$test_dir/output" 2>&1; then |
| | | cat "$test_dir/output" >&2 |
| | | exit 1 |
| | | fi |
| | | if [ -s "$test_dir/output" ]; then |
| | | cat "$test_dir/output" >&2 |
| | | exit 1 |
| | | fi |
| | | test -z "$OPENDJ_JAVA_ARGS" |
| | | test "$res:$DIR_TO_TEST:$TMP_FILE:$remove_dir" = "caller:$test_dir/caller:$test_dir/caller-file:caller" |
| | | test -z "$(ls -A "$OPENDJ_TMP_DIR")" |
| | | |
| | | # Prevent the probe file in the temporary directory from becoming executable, |
| | | # while allowing the real probe to make and execute its file in HOME. |
| | | chmod() { |
| | | case $2 in |
| | | "$OPENDJ_TMP_DIR"/*) ;; |
| | | *) command chmod "$@" ;; |
| | | esac |
| | | } |
| | | set_bc_dir >"$test_dir/output" 2>&1 |
| | | unset -f chmod |
| | | test "$OPENDJ_JAVA_ARGS" = " -Dorg.bouncycastle.native.loader.install_dir=$HOME" |
| | | test -z "$(ls -A "$OPENDJ_TMP_DIR")" |
| | | test -z "$(ls -A "$HOME")" |
| | | OPENDJ_JAVA_ARGS= |
| | | |
| | | # A directory created by the real probe must be removed afterwards. |
| | | check_noexec "$test_dir/missing" |
| | | test ! -e "$test_dir/missing" |
| | | |
| | | # Simulate a noexec mount: the production selection logic still runs, while |
| | | # the probe returns the result of attempting to execute from each directory. |
| | | check_noexec() { [ "$1" = "$HOME" ]; } |
| | | set_bc_dir >"$test_dir/output" 2>&1 |
| | | test "$OPENDJ_JAVA_ARGS" = " -Dorg.bouncycastle.native.loader.install_dir=$HOME" |
| | | grep -F "WARNING: $OPENDJ_TMP_DIR is mounted as noexec" "$test_dir/output" >/dev/null |
| | | if grep -F 'the OpenDJ installation could cause errors' "$test_dir/output" >/dev/null; then |
| | | cat "$test_dir/output" >&2 |
| | | exit 1 |
| | | fi |
| | | |
| | | # An explicit BC installation directory must be preserved without probing. |
| | | OPENDJ_JAVA_ARGS='-Dorg.bouncycastle.native.loader.install_dir=/chosen' |
| | | check_noexec() { echo 'unexpected probe'; return 1; } |
| | | set_bc_dir >"$test_dir/output" 2>&1 |
| | | test ! -s "$test_dir/output" |
| | | test "$OPENDJ_JAVA_ARGS" = '-Dorg.bouncycastle.native.loader.install_dir=/chosen' |
| | | |
| | | # If neither directory permits execution, report it and do not set a fallback. |
| | | OPENDJ_JAVA_ARGS= |
| | | check_noexec() { return 1; } |
| | | set_bc_dir >"$test_dir/output" 2>&1 |
| | | test -z "$OPENDJ_JAVA_ARGS" |
| | | grep -F 'the OpenDJ installation could cause errors' "$test_dir/output" >/dev/null |
| | | |
| | | echo 'script-util checks passed' |