tests: automate DOS quota smoke handoff with current scripts
This commit is contained in:
28
nwtests.c
28
nwtests.c
@@ -65,6 +65,7 @@ static void tests_usage(void)
|
||||
fprintf(stdout, " TESTS NCP2225MODID file [id] (modifier-id xattr metadata)\n");
|
||||
fprintf(stdout, " TESTS NCP2225MAXSPACE dir [blocks] (directory maximum-space/quota)\n");
|
||||
fprintf(stdout, " TESTS WRITE4K file [count] (write count 4K blocks; default 1)\n");
|
||||
fprintf(stdout, " TESTS WAITJY (wait until J/j/Y/y is pressed)\n");
|
||||
fprintf(stdout, " TESTS NCP221EINFO dir (dump NCP22/1E directory info layout)\n");
|
||||
fprintf(stdout, " TESTS NCP22S4 path RF|42|0x42|ALL|NONE\n");
|
||||
fprintf(stdout, " TESTS NCP22REN oldpath newpath (NCP22/2E Rename Or Move old)\n");
|
||||
@@ -1263,6 +1264,29 @@ static int tests_parse_int_arg(char *s, int *value_out)
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
static int tests_waitjy(void)
|
||||
{
|
||||
int ch;
|
||||
|
||||
fprintf(stdout, "Press J/j/Y/y after the Linux quota setup is complete...\n");
|
||||
fflush(stdout);
|
||||
|
||||
for (;;) {
|
||||
ch = getch();
|
||||
if (ch == 'J' || ch == 'j' || ch == 'Y' || ch == 'y') {
|
||||
fprintf(stdout, "\nContinuing after confirmation.\n");
|
||||
return(0);
|
||||
}
|
||||
if (ch == 3 || ch == 27) {
|
||||
fprintf(stdout, "\nAborted by key 0x%02x.\n", ch & 0xff);
|
||||
return(1);
|
||||
}
|
||||
fprintf(stdout, "\nIgnoring key 0x%02x; press J/j/Y/y to continue.\n", ch & 0xff);
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
||||
static int tests_write4k(char *path, char *count_arg)
|
||||
{
|
||||
char buf[4096];
|
||||
@@ -2741,6 +2765,10 @@ int func_tests(int argc, char *argv[], int mode)
|
||||
return tests_ncp2225adate(argv[2], argv[3]);
|
||||
}
|
||||
|
||||
if (tool_strsame(argv[1], "WAITJY")) {
|
||||
return tests_waitjy();
|
||||
}
|
||||
|
||||
if (tool_strsame(argv[1], "WRITE4K")) {
|
||||
if (argc < 3)
|
||||
return tests_write4k(NULL, NULL);
|
||||
|
||||
@@ -33,5 +33,10 @@ install -m 0644 "$SRC" "$SYS/public/ndir.exe"
|
||||
|
||||
install -m 0644 "$SRC" "$SYS/public/tests.exe"
|
||||
|
||||
DLY="/home/mario/mars/mars-nwe-build/dosutils/dlystrt.exe"
|
||||
if [ -f "$DLY" ]; then
|
||||
install -m 0644 "$DLY" "$SYS/public/dlystrt.exe"
|
||||
fi
|
||||
|
||||
|
||||
echo "deployed selected Open Source DOS utils from: $SRC"
|
||||
|
||||
@@ -1,61 +1,129 @@
|
||||
@ECHO OFF
|
||||
REM DQTC.BAT
|
||||
REM Run as NOPASSUSER after Linux-side quota setup.
|
||||
REM Started by DQTSTA via DLYSTRT. Runs from C:\DQTTMP.
|
||||
REM It waits for the Linux quota setup, then logs in as NOPASSUSER and proves
|
||||
REM that the 13th 4K write is denied.
|
||||
|
||||
C:
|
||||
CD \DQTTMP
|
||||
|
||||
IF EXIST PASS.TAG DEL PASS.TAG
|
||||
IF EXIST FAIL.TAG DEL FAIL.TAG
|
||||
IF EXIST WRITE.LOG DEL WRITE.LOG
|
||||
IF EXIST HELPER.TXT DEL HELPER.TXT
|
||||
|
||||
ECHO DQTC helper started from C:\DQTTMP. > C:\DQTTMP\HELPER.TXT
|
||||
ECHO Waiting for Linux quota setup before logout/login. >> C:\DQTTMP\HELPER.TXT
|
||||
ECHO. >> C:\DQTTMP\HELPER.TXT
|
||||
ECHO DQTC wartet jetzt auf den Linux-Teil.
|
||||
ECHO Linux: quota fuer NOPASSUSER auf 12x4K setzen.
|
||||
ECHO Danach hier J, j, Y oder y druecken.
|
||||
C:\DQTTMP\TESTS WAITJY > C:\DQTTMP\WAIT.OUT
|
||||
IF ERRORLEVEL 1 GOTO ABORT
|
||||
|
||||
ECHO === LOGOUT from supervisor session === >> C:\DQTTMP\HELPER.TXT
|
||||
C:\DQTTMP\LOGOUT > C:\DQTTMP\D01_LOGOUT.OUT
|
||||
|
||||
ECHO === LOGIN NOPASSUSER === >> C:\DQTTMP\HELPER.TXT
|
||||
C:\DQTTMP\LOGIN NOPASSUSER > C:\DQTTMP\D02_LOGIN_USER.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST DQTTEST\NCPQFILL\NUL GOTO HAVEDIR
|
||||
ECHO FAIL: F:\DQTTEST\NCPQFILL missing after NOPASSUSER login. >> C:\DQTTMP\WRITE.LOG
|
||||
ECHO FAIL > C:\DQTTMP\FAIL.TAG
|
||||
GOTO RELSUP
|
||||
:HAVEDIR
|
||||
|
||||
IF NOT EXIST DQTCMP\NUL MD DQTCMP
|
||||
IF NOT EXIST DQTCMP\DOS\NUL MD DQTCMP\DOS
|
||||
IF NOT EXIST DQTTEST\NCPQFILL\NUL MD DQTTEST\NCPQFILL
|
||||
IF EXIST F:\DQTCMP\PASS.TAG DEL F:\DQTCMP\PASS.TAG
|
||||
IF EXIST F:\DQTCMP\FAIL.TAG DEL F:\DQTCMP\FAIL.TAG
|
||||
IF EXIST F:\DQTCMP\DOS\WRITE.LOG DEL F:\DQTCMP\DOS\WRITE.LOG
|
||||
|
||||
ECHO DQTC DOS quota write test as current user > F:\DQTCMP\DOS\WRITE.LOG
|
||||
ECHO Writing 12 allowed 4K files. >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
ECHO DQTC DOS quota write test as NOPASSUSER > C:\DQTTMP\WRITE.LOG
|
||||
ECHO Writing 12 allowed 4K files. >> C:\DQTTMP\WRITE.LOG
|
||||
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00001.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00001.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO FAILGOOD
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00002.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00002.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO FAILGOOD
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00003.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00003.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO FAILGOOD
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00004.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00004.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO FAILGOOD
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00005.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00005.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO FAILGOOD
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00006.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00006.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO FAILGOOD
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00007.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00007.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO FAILGOOD
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00008.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00008.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO FAILGOOD
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00009.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00009.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO FAILGOOD
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00010.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00010.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO FAILGOOD
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00011.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00011.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO FAILGOOD
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00012.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00012.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO FAILGOOD
|
||||
|
||||
ECHO Attempting expected failing 13th 4K file. >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
PUBLIC\TESTS WRITE4K F:\DQTTEST\NCPQFILL\QFAIL.BIN 1 >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
ECHO Attempting expected failing 13th 4K file. >> C:\DQTTMP\WRITE.LOG
|
||||
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\QFAIL.BIN 1 >> C:\DQTTMP\WRITE.LOG
|
||||
IF ERRORLEVEL 1 GOTO PASS
|
||||
|
||||
ECHO FAIL: expected QFAIL.BIN to be denied, but it succeeded. >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
ECHO FAIL > F:\DQTCMP\FAIL.TAG
|
||||
GOTO END
|
||||
ECHO FAIL: expected QFAIL.BIN to be denied, but it succeeded. >> C:\DQTTMP\WRITE.LOG
|
||||
ECHO FAIL > C:\DQTTMP\FAIL.TAG
|
||||
IF EXIST F:\DQTCMP\NUL ECHO FAIL > F:\DQTCMP\FAIL.TAG
|
||||
GOTO RELSUP
|
||||
|
||||
:FAILGOOD
|
||||
ECHO FAIL: an allowed 4K write failed before the quota boundary. >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
ECHO FAIL > F:\DQTCMP\FAIL.TAG
|
||||
GOTO END
|
||||
ECHO FAIL: an allowed 4K write failed before the quota boundary. >> C:\DQTTMP\WRITE.LOG
|
||||
ECHO FAIL > C:\DQTTMP\FAIL.TAG
|
||||
IF EXIST F:\DQTCMP\NUL ECHO FAIL > F:\DQTCMP\FAIL.TAG
|
||||
GOTO RELSUP
|
||||
|
||||
:PASS
|
||||
ECHO PASS: 13th 4K file was denied. >> F:\DQTCMP\DOS\WRITE.LOG
|
||||
ECHO PASS > F:\DQTCMP\PASS.TAG
|
||||
ECHO PASS: 13th 4K file was denied. >> C:\DQTTMP\WRITE.LOG
|
||||
ECHO PASS > C:\DQTTMP\PASS.TAG
|
||||
IF EXIST F:\DQTCMP\NUL ECHO PASS > F:\DQTCMP\PASS.TAG
|
||||
GOTO RELSUP
|
||||
|
||||
:ABORT
|
||||
ECHO FAIL: user aborted before Linux quota setup confirmation. > C:\DQTTMP\WRITE.LOG
|
||||
ECHO FAIL > C:\DQTTMP\FAIL.TAG
|
||||
GOTO END
|
||||
|
||||
:RELSUP
|
||||
TYPE C:\DQTTMP\WRITE.LOG
|
||||
IF "%LGNTPWD%"=="" GOTO MANUAL
|
||||
|
||||
ECHO === LOGOUT NOPASSUSER === >> C:\DQTTMP\HELPER.TXT
|
||||
C:\DQTTMP\LOGOUT > C:\DQTTMP\D03_LOGOUT_USER.OUT
|
||||
|
||||
ECHO === LOGIN SUPERVISOR === >> C:\DQTTMP\HELPER.TXT
|
||||
C:\DQTTMP\LOGIN SUPERVISOR /PWD:%LGNTPWD% > C:\DQTTMP\D04_LOGIN_SUP.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST DQTSTA.BAT GOTO QUEUEP2
|
||||
ECHO F:\DQTSTA.BAT missing after supervisor relogin. >> C:\DQTTMP\HELPER.TXT
|
||||
ECHO Bitte manuell als SUPERVISOR einloggen und F:\DQTSTA PART2 starten.
|
||||
GOTO END
|
||||
|
||||
:QUEUEP2
|
||||
C:
|
||||
CD \DQTTMP
|
||||
DLYSTRT /T:2 F:\DQTSTA.BAT PART2 > C:\DQTTMP\D05_P2.OUT
|
||||
ECHO DQTC queued F:\DQTSTA.BAT PART2. >> C:\DQTTMP\HELPER.TXT
|
||||
ECHO DQTC fertig. PART2 wird per DLYSTRT gestartet.
|
||||
GOTO END
|
||||
|
||||
:MANUAL
|
||||
ECHO LGNTPWD not set; automatic SUPERVISOR relogin skipped. >> C:\DQTTMP\HELPER.TXT
|
||||
ECHO Bitte manuell als SUPERVISOR einloggen und dann ausfuehren:
|
||||
ECHO F:
|
||||
ECHO DQTSTA PART2
|
||||
GOTO END
|
||||
|
||||
:END
|
||||
TYPE F:\DQTCMP\DOS\WRITE.LOG
|
||||
|
||||
@@ -1,22 +1,25 @@
|
||||
@ECHO OFF
|
||||
REM DQTSTA.BAT
|
||||
REM DOS-side quota write-deny smoke for MARS-NWE.
|
||||
REM Automated DOS-side quota write-deny smoke for MARS-NWE.
|
||||
REM
|
||||
REM This is intentionally a mixed Linux/DOS test:
|
||||
REM 1. Run DQTSTA PREP as SUPERVISOR from the target volume.
|
||||
REM 2. On Linux set the volume userquota for NOPASSUSER.
|
||||
REM 3. Login as NOPASSUSER and run DQTC.BAT from this directory.
|
||||
REM 4. Login as SUPERVISOR and run DQTSTA PART2, then DQTZIP.
|
||||
REM Run as SUPERVISOR from the target volume:
|
||||
REM SET LGNTPWD=your-supervisor-password
|
||||
REM F:
|
||||
REM DQTSTA
|
||||
REM
|
||||
REM DQTSTA prepares F:\\DQTTEST/F:\\DQTCMP, copies DQTC.BAT plus the
|
||||
REM maintainer helpers to C:\\DQTTMP, and uses DLYSTRT so the helper keeps
|
||||
REM running after LOGOUT/LOGIN. DQTC waits for J/j/Y/y while the Linux side
|
||||
REM sets the quota.
|
||||
|
||||
IF "%1"=="" GOTO PREP
|
||||
IF "%1"=="PREP" GOTO PREP
|
||||
IF "%1"=="prep" GOTO PREP
|
||||
IF "%1"=="" GOTO PART1
|
||||
IF "%1"=="PREP" GOTO PART1
|
||||
IF "%1"=="prep" GOTO PART1
|
||||
IF "%1"=="PART2" GOTO PART2
|
||||
IF "%1"=="part2" GOTO PART2
|
||||
ECHO Usage: DQTSTA [PREP^|PART2]
|
||||
GOTO END
|
||||
GOTO USAGE
|
||||
|
||||
:PREP
|
||||
:PART1
|
||||
F:
|
||||
CD \
|
||||
|
||||
@@ -35,10 +38,14 @@ IF EXIST F:\DQTCMP\PASS.TAG DEL F:\DQTCMP\PASS.TAG
|
||||
IF EXIST F:\DQTCMP\DQTSTA.ZIP DEL F:\DQTCMP\DQTSTA.ZIP
|
||||
IF EXIST F:\DQTCMP\ZIP.LOG DEL F:\DQTCMP\ZIP.LOG
|
||||
IF EXIST F:\DQTCMP\DOS\*.OUT DEL F:\DQTCMP\DOS\*.OUT
|
||||
IF EXIST F:\DQTCMP\DOS\*.LOG DEL F:\DQTCMP\DOS\*.LOG
|
||||
IF EXIST F:\DQTCMP\DOS\*.TXT DEL F:\DQTCMP\DOS\*.TXT
|
||||
IF EXIST F:\DQTCMP\DOS\*.TAG DEL F:\DQTCMP\DOS\*.TAG
|
||||
|
||||
ECHO DQTSTA DOS quota write-deny smoke > F:\DQTCMP\RUN.LOG
|
||||
ECHO Volume-side setup is done from DOS. Quota limit is set from Linux. >> F:\DQTCMP\RUN.LOG
|
||||
ECHO Expected Linux setup: userquota for NOPASSUSER allows 12x4K, then DOS write 13th file fails. >> F:\DQTCMP\RUN.LOG
|
||||
ECHO Part 1 started while logged in as SUPERVISOR. >> F:\DQTCMP\RUN.LOG
|
||||
ECHO Linux must set NOPASSUSER quota while DQTC waits for J/j/Y/y. >> F:\DQTCMP\RUN.LOG
|
||||
ECHO Expected: 12x4K writes succeed, 13th 4K write is denied. >> F:\DQTCMP\RUN.LOG
|
||||
ECHO. >> F:\DQTCMP\RUN.LOG
|
||||
|
||||
REM Give the normal user enough rights to create files and write result logs.
|
||||
@@ -54,29 +61,74 @@ NPUBLIC\GRANT R W C E M F A FOR F:\DQTCMP TO USER NOPASSUSER > F:\DQTCMP\SETUP\G
|
||||
NPUBLIC\RIGHTS F:\DQTTEST\NCPQFILL > F:\DQTCMP\SETUP\RIGHTS.OUT
|
||||
|
||||
ECHO === NEXT LINUX STEP === > F:\DQTCMP\LINUX.TXT
|
||||
ECHO Set volume userquota for NOPASSUSER to 12x4K on this volume. >> F:\DQTCMP\LINUX.TXT
|
||||
ECHO Then login as NOPASSUSER and run: >> F:\DQTCMP\LINUX.TXT
|
||||
ECHO F:\DQTC.BAT >> F:\DQTCMP\LINUX.TXT
|
||||
ECHO Then login as SUPERVISOR and run: >> F:\DQTCMP\LINUX.TXT
|
||||
ECHO F:\DQTSTA.BAT PART2 >> F:\DQTCMP\LINUX.TXT
|
||||
ECHO When DQTC waits, set volume userquota for NOPASSUSER to 12x4K on this volume. >> F:\DQTCMP\LINUX.TXT
|
||||
ECHO Then return to DOS and press J, j, Y, or y. >> F:\DQTCMP\LINUX.TXT
|
||||
|
||||
ECHO DQTSTA PREP finished. >> F:\DQTCMP\RUN.LOG
|
||||
IF EXIST C:\DQTTMP\NUL DELTREE /Y C:\DQTTMP\*.*
|
||||
IF NOT EXIST C:\DQTTMP\NUL MD C:\DQTTMP
|
||||
|
||||
ECHO Copying delayed helper and local tools to C:\DQTTMP. >> F:\DQTCMP\RUN.LOG
|
||||
COPY F:\DQTC.BAT C:\DQTTMP > F:\DQTCMP\SETUP\CP_DQTC.OUT
|
||||
COPY F:\PUBLIC\TESTS.EXE C:\DQTTMP > F:\DQTCMP\SETUP\CP_TESTS.OUT
|
||||
COPY F:\PUBLIC\DLYSTRT.EXE C:\DQTTMP > F:\DQTCMP\SETUP\CP_DLY.OUT
|
||||
COPY F:\NLOGIN\LOGIN.* C:\DQTTMP > F:\DQTCMP\SETUP\CP_LOGIN.OUT
|
||||
COPY F:\NPUBLIC\LOGOUT.* C:\DQTTMP > F:\DQTCMP\SETUP\CP_LOGOUT.OUT
|
||||
|
||||
IF EXIST C:\DQTTMP\DQTC.BAT GOTO HVDQTC
|
||||
ECHO ERROR: C:\DQTTMP\DQTC.BAT not copied. >> F:\DQTCMP\RUN.LOG
|
||||
ECHO ERROR: C:\DQTTMP\DQTC.BAT not copied.
|
||||
GOTO END
|
||||
:HVDQTC
|
||||
IF EXIST C:\DQTTMP\TESTS.EXE GOTO HVTESTS
|
||||
ECHO ERROR: C:\DQTTMP\TESTS.EXE not copied. >> F:\DQTCMP\RUN.LOG
|
||||
ECHO ERROR: C:\DQTTMP\TESTS.EXE not copied.
|
||||
GOTO END
|
||||
:HVTESTS
|
||||
IF EXIST C:\DQTTMP\DLYSTRT.EXE GOTO HVDLY
|
||||
ECHO ERROR: C:\DQTTMP\DLYSTRT.EXE not copied. >> F:\DQTCMP\RUN.LOG
|
||||
ECHO ERROR: C:\DQTTMP\DLYSTRT.EXE not copied. Build/install dostools with MAINTAINER_BUILD=ON.
|
||||
GOTO END
|
||||
:HVDLY
|
||||
IF EXIST C:\DQTTMP\LOGIN.EXE GOTO HVLOGIN
|
||||
ECHO ERROR: C:\DQTTMP\LOGIN.EXE not copied. >> F:\DQTCMP\RUN.LOG
|
||||
ECHO ERROR: C:\DQTTMP\LOGIN.EXE not copied.
|
||||
GOTO END
|
||||
:HVLOGIN
|
||||
IF EXIST C:\DQTTMP\LOGOUT.EXE GOTO HVLOGOUT
|
||||
ECHO ERROR: C:\DQTTMP\LOGOUT.EXE not copied. >> F:\DQTCMP\RUN.LOG
|
||||
ECHO ERROR: C:\DQTTMP\LOGOUT.EXE not copied.
|
||||
GOTO END
|
||||
:HVLOGOUT
|
||||
|
||||
C:
|
||||
CD \DQTTMP
|
||||
DLYSTRT /T:2 DQTC.BAT >> F:\DQTCMP\RUN.LOG
|
||||
|
||||
ECHO DQTC queued via DLYSTRT from C:\DQTTMP. >> F:\DQTCMP\RUN.LOG
|
||||
ECHO.
|
||||
ECHO DQTSTA PREP fertig.
|
||||
ECHO Jetzt Linux quota fuer NOPASSUSER setzen, dann als NOPASSUSER F:\DQTC.BAT starten.
|
||||
ECHO DQTSTA Part 1 fertig.
|
||||
ECHO DQTC startet gleich von C:\DQTTMP und wartet dann auf den Linux-Quota-Teil.
|
||||
ECHO Wenn DQTC wartet: Linux quota setzen und dann im DOS J druecken.
|
||||
GOTO END
|
||||
|
||||
:PART2
|
||||
F:
|
||||
CD \
|
||||
IF NOT EXIST DQTCMP\NUL MD DQTCMP
|
||||
IF NOT EXIST DQTCMP\DOS\NUL MD DQTCMP\DOS
|
||||
|
||||
ECHO DQTSTA PART2 collecting C:\DQTTMP files. >> F:\DQTCMP\RUN.LOG
|
||||
IF EXIST C:\DQTTMP\*.OUT COPY C:\DQTTMP\*.OUT F:\DQTCMP\DOS >> F:\DQTCMP\RUN.LOG
|
||||
IF EXIST C:\DQTTMP\*.LOG COPY C:\DQTTMP\*.LOG F:\DQTCMP\DOS >> F:\DQTCMP\RUN.LOG
|
||||
IF EXIST C:\DQTTMP\*.TXT COPY C:\DQTTMP\*.TXT F:\DQTCMP\DOS >> F:\DQTCMP\RUN.LOG
|
||||
IF EXIST C:\DQTTMP\*.TAG COPY C:\DQTTMP\*.TAG F:\DQTCMP\DOS >> F:\DQTCMP\RUN.LOG
|
||||
|
||||
ECHO DQTSTA PART2 summary > F:\DQTCMP\SUMMARY.TXT
|
||||
IF EXIST F:\DQTCMP\PASS.TAG ECHO PASS: DOS quota deny observed. >> F:\DQTCMP\SUMMARY.TXT
|
||||
IF EXIST F:\DQTCMP\FAIL.TAG ECHO FAIL: DOS quota deny was not observed. >> F:\DQTCMP\SUMMARY.TXT
|
||||
IF NOT EXIST F:\DQTCMP\PASS.TAG IF NOT EXIST F:\DQTCMP\FAIL.TAG ECHO UNKNOWN: DQTC.BAT result tags missing. >> F:\DQTCMP\SUMMARY.TXT
|
||||
IF EXIST C:\DQTTMP\PASS.TAG ECHO PASS: DOS quota deny observed. >> F:\DQTCMP\SUMMARY.TXT
|
||||
IF EXIST C:\DQTTMP\FAIL.TAG ECHO FAIL: DOS quota deny was not observed. >> F:\DQTCMP\SUMMARY.TXT
|
||||
IF NOT EXIST C:\DQTTMP\PASS.TAG IF NOT EXIST C:\DQTTMP\FAIL.TAG ECHO UNKNOWN: DQTC.BAT result tags missing. >> F:\DQTCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\DQTCMP\SUMMARY.TXT
|
||||
ECHO DOS log files are in F:\DQTCMP\DOS. >> F:\DQTCMP\SUMMARY.TXT
|
||||
ECHO DOS log files copied from C:\DQTTMP to F:\DQTCMP\DOS. >> F:\DQTCMP\SUMMARY.TXT
|
||||
ECHO Linux/nw.log evidence should be collected with the matching mars-nwe smoke wrapper. >> F:\DQTCMP\SUMMARY.TXT
|
||||
|
||||
ECHO.
|
||||
@@ -84,4 +136,10 @@ TYPE F:\DQTCMP\SUMMARY.TXT
|
||||
ECHO Optional: run DQTZIP.
|
||||
GOTO END
|
||||
|
||||
:USAGE
|
||||
ECHO Usage: DQTSTA [PREP^|PART2]
|
||||
ECHO Ohne Parameter startet DQTSTA Part 1 und queued C:\DQTTMP\DQTC.BAT via DLYSTRT.
|
||||
ECHO DQTC wartet auf J/j/Y/y, damit der Linux-Quota-Schritt dazwischen laufen kann.
|
||||
GOTO END
|
||||
|
||||
:END
|
||||
|
||||
@@ -1,55 +1,64 @@
|
||||
# DOS quota write-deny smoke
|
||||
|
||||
This test proves the last step of NetWare-style quota enforcement with DOS
|
||||
board tools: Linux/NCPFS sets the user quota, then a real DOS client logs in as
|
||||
`NOPASSUSER` and attempts the file writes.
|
||||
This test proves the client-visible quota boundary with DOS board tools while
|
||||
keeping the authority split explicit:
|
||||
|
||||
It is intentionally split because the authoritative quota setup remains on the
|
||||
Linux/MARS-NWE side:
|
||||
- Linux/MARS-NWE sets the quota on the host side.
|
||||
- DOS writes as `NOPASSUSER` and proves that 12 4K blocks are allowed while the
|
||||
13th 4K block is denied.
|
||||
|
||||
1. In DOS, login as `SUPERVISOR` on the target volume and run:
|
||||
The flow uses the same `DLYSTRT` pattern as the rights/login tests, because
|
||||
`LOGOUT` removes network mappings. `DQTSTA` copies `DQTC.BAT`, `DLYSTRT.EXE`,
|
||||
`TESTS.EXE`, `LOGIN`, and `LOGOUT` to `C:\DQTTMP`, then queues the helper from
|
||||
there. The helper waits for `J/j/Y/y` before it logs out and logs in as
|
||||
`NOPASSUSER`, so the Linux quota setup can happen in between.
|
||||
|
||||
```bat
|
||||
F:
|
||||
DQTSTA PREP
|
||||
```
|
||||
## DOS part 1
|
||||
|
||||
This creates `F:\DQTTEST\NCPQFILL`, grants `NOPASSUSER` write/create rights,
|
||||
and creates `F:\DQTCMP` for logs.
|
||||
Login as `SUPERVISOR` on the target volume and run:
|
||||
|
||||
2. On Linux, set the user quota for `NOPASSUSER` to 12 4K blocks on the same
|
||||
volume. With the mars-nwe ncpfs helper this is typically:
|
||||
```bat
|
||||
SET LGNTPWD=zefuqUVe
|
||||
F:
|
||||
DQTSTA
|
||||
```
|
||||
|
||||
```sh
|
||||
./nwfs_ncpfs_userquota -S MARS -U SUPERVISOR -P 'password' \
|
||||
--volume QUOTA --object NOPASSUSER --type 1 --limit-4k 12
|
||||
```
|
||||
`DQTSTA` creates:
|
||||
|
||||
For SYS/NWQUOTA metadata-backend testing, use `--volume SYS` instead.
|
||||
- `F:\DQTTEST\NCPQFILL` for the data files
|
||||
- `F:\DQTCMP` for network-side logs
|
||||
- `C:\DQTTMP` for the delayed helper and local logs
|
||||
|
||||
3. In DOS, login as `NOPASSUSER` and run:
|
||||
## Linux handoff
|
||||
|
||||
```bat
|
||||
F:\DQTC.BAT
|
||||
```
|
||||
When DOS prints that `DQTC` is waiting, set the quota on Linux, for example:
|
||||
|
||||
`DQTC` writes `Q00001.BIN` through `Q00012.BIN` as 4K files, then expects
|
||||
`QFAIL.BIN` to be denied.
|
||||
```sh
|
||||
./nwfs_ncpfs_userquota -S MARS -U SUPERVISOR -P 'zefuqUVe' \
|
||||
--volume QUOTA --object NOPASSUSER --type 1 --limit-4k 12
|
||||
```
|
||||
|
||||
4. In DOS, login as `SUPERVISOR` and run:
|
||||
Then return to DOS and press `J`, `j`, `Y`, or `y`.
|
||||
|
||||
```bat
|
||||
F:\DQTSTA PART2
|
||||
F:\DQTZIP
|
||||
```
|
||||
## DOS part 2
|
||||
|
||||
Expected result:
|
||||
The helper logs in as `NOPASSUSER`, writes `Q00001.BIN` through `Q00012.BIN`,
|
||||
and expects `QFAIL.BIN` to fail. If `LGNTPWD` is set, it logs back in as
|
||||
`SUPERVISOR` and queues:
|
||||
|
||||
```bat
|
||||
F:\DQTSTA.BAT PART2
|
||||
```
|
||||
|
||||
Finally, optionally pack the logs:
|
||||
|
||||
```bat
|
||||
F:
|
||||
DQTZIP
|
||||
```
|
||||
|
||||
Expected summary:
|
||||
|
||||
```text
|
||||
PASS: DOS quota deny observed.
|
||||
```
|
||||
|
||||
The test does not set quotas itself. That keeps the authority split explicit:
|
||||
Linuxquota volumes are configured/enforced by the Linux backend, while NWQUOTA
|
||||
metadata volumes use the MARS-NWE metadata backend. The DOS part proves the
|
||||
client-visible write behavior.
|
||||
|
||||
Reference in New Issue
Block a user