From 9d27ee4eb32b5905ced9c3f30fd8848bf5fbb1f8 Mon Sep 17 00:00:00 2001 From: OpenAI Date: Wed, 10 Jun 2026 20:48:24 +0000 Subject: [PATCH] tests: verify IRM readback as non-supervisor --- tests/nwfs/nwfs_ncpfs_metadata_smoke.sh.in | 57 ++++++++++++++++++++-- 1 file changed, 52 insertions(+), 5 deletions(-) diff --git a/tests/nwfs/nwfs_ncpfs_metadata_smoke.sh.in b/tests/nwfs/nwfs_ncpfs_metadata_smoke.sh.in index c635aa5..7a2b641 100755 --- a/tests/nwfs/nwfs_ncpfs_metadata_smoke.sh.in +++ b/tests/nwfs/nwfs_ncpfs_metadata_smoke.sh.in @@ -15,6 +15,7 @@ if [ "$#" -lt 4 ]; then echo "Set NWFS_NCPFS_DIR_ATTR_HEX/NWFS_NCPFS_FILE_ATTR_HEX to verify DOS attribute metadata; defaults: dir 0x12, file 0x26. Set empty to skip." >&2 echo "Set NWFS_NCPFS_IRM_RIGHTS to verify inherited-rights-mask metadata; default: S. Set empty to skip." >&2 echo "Set NWFS_NCPFS_DOSINFO_GRANT_OBJECT/TYPE to grant temporary MA rights for DOS info mutation; default: EVERYONE/2. Set object empty to skip." >&2 + echo "Set NWFS_NCPFS_DOSINFO_USER/PASSWORD to verify IRM NCP readback as a non-SUPERVISOR user; default: NOPASSUSER with no password. Set user empty to skip." >&2 echo "Set NWFS_NCPFS_RESET_TESTDIR=0 to keep an existing test directory. Default is 1 and removes TESTDIR before the smoke." >&2 echo "Set NWFS_NCPFS_HOST_RESET_TESTDIR=0 to forbid host-side reset fallback when NCPFS cannot create at the volume root. Default is 1." >&2 echo "Set NWFS_NCPFS_DIR_QUOTA_4K to override the directory quota limit; set it empty to skip. Directory quota is off by default for NetWare 3.x/4.x smoke." >&2 @@ -48,16 +49,21 @@ USER_QUOTA_UNLIMITED_4K=1073741824 DIR_ATTR_HEX=${NWFS_NCPFS_DIR_ATTR_HEX-0x00000012} FILE_ATTR_HEX=${NWFS_NCPFS_FILE_ATTR_HEX-0x00000026} IRM_RIGHTS=${NWFS_NCPFS_IRM_RIGHTS-S} -DOSINFO_GRANT_OBJECT=${NWFS_NCPFS_DOSINFO_GRANT_OBJECT-EVERYONE} -DOSINFO_GRANT_TYPE=${NWFS_NCPFS_DOSINFO_GRANT_TYPE-2} -DOSINFO_GRANT_RIGHTS=${NWFS_NCPFS_DOSINFO_GRANT_RIGHTS-[MA]} -DOSINFO_RIGHTS_GRANTED=0 RIGHTS_MATRIX=${NWFS_NCPFS_RIGHTS_MATRIX:-R F RF W C E M A RWCEMFA S} RESET_TESTDIR=${NWFS_NCPFS_RESET_TESTDIR:-1} HOST_RESET_TESTDIR=${NWFS_NCPFS_HOST_RESET_TESTDIR:-1} RIGHTS_USER=${NWFS_NCPFS_RIGHTS_USER:-} RIGHTS_PASSWORD=${NWFS_NCPFS_RIGHTS_PASSWORD-} RIGHTS_MOUNTPOINT=${NWFS_NCPFS_RIGHTS_MOUNTPOINT:-} +DOSINFO_GRANT_OBJECT=${NWFS_NCPFS_DOSINFO_GRANT_OBJECT-EVERYONE} +DOSINFO_GRANT_TYPE=${NWFS_NCPFS_DOSINFO_GRANT_TYPE-2} +DOSINFO_GRANT_RIGHTS=${NWFS_NCPFS_DOSINFO_GRANT_RIGHTS-[MA]} +DOSINFO_USER=${NWFS_NCPFS_DOSINFO_USER-NOPASSUSER} +DOSINFO_PASSWORD=${NWFS_NCPFS_DOSINFO_PASSWORD-} +DOSINFO_MOUNTPOINT=${NWFS_NCPFS_DOSINFO_MOUNTPOINT:-} +DOSINFO_RIGHTS_GRANTED=0 +DOSINFO_MOUNTED_BY_SCRIPT=0 +DOSINFO_CLEAN_MOUNT=0 VERIFY_ACL=${NWFS_NCPFS_VERIFY_ACL:-auto} MKDIR_ERR=$(mktemp "${TMPDIR:-/tmp}/nwfs_ncpfs_mkdir.XXXXXX") WRITE_ERR=$(mktemp "${TMPDIR:-/tmp}/nwfs_ncpfs_write.XXXXXX") @@ -114,6 +120,14 @@ cleanup() { umount "$RIGHTS_MOUNTPOINT" || true fi fi + if [ "${DOSINFO_MOUNTED_BY_SCRIPT:-0}" = 1 ] && [ -n "${DOSINFO_MOUNTPOINT:-}" ] && mountpoint -q "$DOSINFO_MOUNTPOINT" 2>/dev/null; then + if command -v ncpumount >/dev/null 2>&1; then + ncpumount "$DOSINFO_MOUNTPOINT" || true + else + umount "$DOSINFO_MOUNTPOINT" || true + fi + fi + [ "${DOSINFO_CLEAN_MOUNT:-0}" = 1 ] && [ -n "${DOSINFO_MOUNTPOINT:-}" ] && rmdir "$DOSINFO_MOUNTPOINT" 2>/dev/null || true rm -f "$MKDIR_ERR" "$WRITE_ERR" "$GRANT_ERR" "$REVOKE_ERR" "$DIRQUOTA_DUMP" "$USERQUOTA_OUT" "$USERQUOTA_DUMP" "$RIGHTS_DUMP" "$ACL_DUMP" "$DOSINFO_DUMP" "$RESET_ERR" [ "$CLEAN_MOUNT" = 1 ] && rmdir "$MOUNTPOINT" 2>/dev/null || true } @@ -336,6 +350,32 @@ mount_rights_user_if_requested() { RIGHTS_NCP_TEST_PATH=$RIGHTS_MOUNTPOINT/$TESTDIR } + +mount_dosinfo_user_if_requested() { + if [ -z "$DOSINFO_USER" ]; then + return 0 + fi + if [ -z "$DOSINFO_MOUNTPOINT" ]; then + DOSINFO_MOUNTPOINT=$(mktemp -d "${TMPDIR:-/tmp}/mars-ncpfs-dosinfo.XXXXXX") + DOSINFO_CLEAN_MOUNT=1 + else + mkdir -p "$DOSINFO_MOUNTPOINT" + DOSINFO_CLEAN_MOUNT=0 + fi + if mountpoint -q "$DOSINFO_MOUNTPOINT" 2>/dev/null; then + DOSINFO_MOUNTED_BY_SCRIPT=0 + echo "using existing DOSINFO NCP readback mount at $DOSINFO_MOUNTPOINT" >&2 + else + if [ -n "$DOSINFO_PASSWORD" ]; then + ncpmount -S "$SERVER" -U "$DOSINFO_USER" -P "$DOSINFO_PASSWORD" "$DOSINFO_MOUNTPOINT" + else + ncpmount -S "$SERVER" -U "$DOSINFO_USER" -n "$DOSINFO_MOUNTPOINT" + fi + DOSINFO_MOUNTED_BY_SCRIPT=1 + fi + DOSINFO_NCP_TEST_PATH=$DOSINFO_MOUNTPOINT/$TESTDIR +} + if mountpoint -q "$MOUNTPOINT" 2>/dev/null; then echo "using existing NCP mount at $MOUNTPOINT" >&2 else @@ -472,8 +512,15 @@ if [ -n "$DIR_ATTR_HEX$FILE_ATTR_HEX$IRM_RIGHTS" ]; then fi if [ -n "$IRM_RIGHTS" ]; then echo "setting inherited rights mask [$IRM_RIGHTS] on $NW_TEST_PATH" >&2 - "$DOSINFO_HELPER" --set-irm "$IRM_RIGHTS" --expect-irm "$IRM_RIGHTS" "$NCP_TEST_PATH" + "$DOSINFO_HELPER" --set-irm "$IRM_RIGHTS" "$NCP_TEST_PATH" sync + if [ -n "$DOSINFO_USER" ]; then + mount_dosinfo_user_if_requested + echo "verifying inherited rights mask [$IRM_RIGHTS] as $DOSINFO_USER on $NW_TEST_PATH" >&2 + "$DOSINFO_HELPER" --expect-irm "$IRM_RIGHTS" "$DOSINFO_NCP_TEST_PATH" + else + echo "NWFS_NCPFS_DOSINFO_USER is empty; skipping NCP IRM readback check to avoid SUPERVISOR expansion" >&2 + fi printf '\n# after inherited rights mask set\n' verify_dosinfo_dump_irm "$HOST_TEST_PATH" "$IRM_RIGHTS" fi