dosutils: align Novell-compatible tests and stage NCOPY work
Update the DOS utilities and test suite with the current Novell comparison state. Validated/updated tool behavior: - improve CREATOR output by showing Novell-style attribute and rights masks - extend FLAGDIR handling with old NCP22 directory attribute read/write fallback paths - expand NDIR Novell-style formatting, filtering, /SUB handling, date output, DI/RI attribute display and richer metadata collection - adjust REVOKE output/grammar, recursive /SUBDIRECTORIES behavior and trustee update/delete paths to better match Novell tools - adjust SLIST header/output behavior for logged-in and logged-out cases - update README status to reflect the currently green/tested tools Test-suite changes: - add/refresh Novell comparison tests for CREATOR, NDIR, REVOKE and SLIST - update NCOPY tests and collection scripts for the current investigation state - refresh per-tool README files and top-level test documentation - keep MAP documented as still separately open NCOPY: - add the current NCOPY implementation and experimental NCP74/server-side-copy scaffolding - build ncopy.c so it stays compile-tested - keep NCOPY disabled in the NET multicall dispatch for now because the server-side-copy/open-handle path is still unsafe and needs further analysis Build: - include ncopy.c in the DOS utility build - drop the temporary MARS_DOSUTILS_VERSION define wiring from CMake
This commit is contained in:
@@ -10,12 +10,6 @@
|
||||
|
||||
option(MAINTAINER_BUILD "Enable maintainer-only DOS tool helpers and diagnostics" OFF)
|
||||
|
||||
if(DEFINED MARS_NWE_VERSION_BASE)
|
||||
set(MARS_DOSUTILS_VERSION "${MARS_NWE_VERSION_BASE}")
|
||||
else()
|
||||
set(MARS_DOSUTILS_VERSION "0.99")
|
||||
endif()
|
||||
|
||||
set(MARS_DOSUTILS_LEGACY_NET_EXE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/netold.exe"
|
||||
CACHE FILEPATH "Legacy/pre-Client32 DOS net.exe used by default for legacy command names"
|
||||
@@ -55,6 +49,7 @@ set(MARS_DOSUTILS_NEW_ONLY_TOOLS
|
||||
ndir
|
||||
creator
|
||||
whoami
|
||||
ncopy
|
||||
)
|
||||
|
||||
if(MARS_NWE_BUILD_DOSUTILS)
|
||||
@@ -83,6 +78,7 @@ if(MARS_NWE_BUILD_DOSUTILS)
|
||||
capture.c
|
||||
creator.c
|
||||
whoami.c
|
||||
ncopy.c
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
@@ -104,7 +100,7 @@ if(MARS_NWE_BUILD_DOSUTILS)
|
||||
set(obj "${CMAKE_CURRENT_BINARY_DIR}/${obj_name}.obj")
|
||||
list(APPEND DOSUTILS_OBJECTS "${obj}")
|
||||
|
||||
set(DOSUTILS_WCL_DEFS -dMARS_DOSUTILS_VERSION=\"${MARS_DOSUTILS_VERSION}\")
|
||||
set(DOSUTILS_WCL_DEFS)
|
||||
if(MAINTAINER_BUILD)
|
||||
list(APPEND DOSUTILS_WCL_DEFS -dMAINTAINER_BUILD)
|
||||
endif()
|
||||
|
||||
40
README.md
40
README.md
@@ -11,27 +11,37 @@ The command dispatcher lives in `net.c`, and the install rules deploy the same b
|
||||
|
||||
## Current status
|
||||
|
||||
The tree is a modernization of the historical mars_nwe DOS utilities. It still keeps the original Borland-era style and APIs where useful, but now also has an Open Watcom/CMake build path and working DOS Client32 support for the FLAG-family and trustee/right tools.
|
||||
The tree is a modernization of the historical mars_nwe DOS utilities. It still
|
||||
keeps the original Borland-era style and APIs where useful, but now also has an
|
||||
Open Watcom/CMake build path and working DOS Client32 support for the
|
||||
Novell-compatible comparison tests.
|
||||
|
||||
Validated recently:
|
||||
Recently validated with byte-for-byte Novell comparison tests or equivalent
|
||||
readback tests:
|
||||
|
||||
- `FLAG` file attribute read/modify through DOS Client32
|
||||
- `FLAGDIR` directory attribute read/modify through DOS Client32
|
||||
- `RIGHTS` effective-rights display through Client32 NCP87
|
||||
- `GRANT` trustee assignment for users and groups
|
||||
- `REVOKE` trustee-right removal for users and groups
|
||||
- `REMOVE` trustee deletion for users and groups
|
||||
- Novell-tool comparison for `FLAG`, including `ALL`, `N`, `RO`, `RW`, high bits, and display layout
|
||||
- Novell-tool comparison for `FLAGDIR`, including `Normal`, `System`, `Hidden`, `DeleteInhibit`, `Purge`, `RenameInhibit`, and combined attributes
|
||||
- Novell-tool comparison for `RIGHTS`, `GRANT`, `REVOKE`, and `REMOVE`
|
||||
- CMake/Open Watcom build using binary-directory object files, so `.obj`/`.o` files are no longer written into the source tree
|
||||
- `CREATOR` metadata/xattr readback, including readable attribute and rights-mask output
|
||||
- `FLAG` file attribute display and modification, including high NetWare bits such as DI/RI
|
||||
- `FLAGDIR` directory attribute display and modification
|
||||
- `GRANT` trustee assignment matrix and normal-user rights readback
|
||||
- `NDIR` directory listing, filters, `/DATES`, `/RIGHTS`, `/SUB`, DI/RI display and user-context readback
|
||||
- `REMOVE` trustee deletion matrix and normal-user rights readback
|
||||
- `REVOKE` trustee-right removal matrix and normal-user rights readback
|
||||
- `RIGHTS` effective-rights display
|
||||
- `SLIST` server listing while logged in and while logged out from `SYS:LOGIN`
|
||||
- `WHOAMI` option/output comparison
|
||||
- maintainer baseline for `LOGIN`/`LOGOUT`
|
||||
|
||||
The DOS test suite is documented in [`test/README.md`](test/README.md). Each
|
||||
feature directory also contains its own README with run instructions and result
|
||||
layout.
|
||||
|
||||
Still to validate or continue:
|
||||
|
||||
- DOSX/VLM/NETX fallback behavior for `FLAG` and `FLAGDIR`
|
||||
- More complex `FLAGDIR` paths beyond the simple mapped-directory cases already tested
|
||||
- full `PUBLIC\MAP` comparison against Novell `MAP` beyond the current MAP baseline/semantics test
|
||||
- DOSX/VLM/NETX fallback behavior where relevant
|
||||
- OS/2 requester/tool behavior
|
||||
- Additional Novell-like utilities such as `NDIR`, `PURGE`, and `SALVAGE`
|
||||
- additional Novell-like utilities such as `PURGE` and `SALVAGE`
|
||||
- further MARS-NWE server-side NCP endpoint coverage where newer tests expose gaps
|
||||
|
||||
## Features
|
||||
|
||||
|
||||
194
c32ncp.c
194
c32ncp.c
@@ -241,6 +241,200 @@ int c32_get_ncp_handle(uint16 *handle_lo, uint16 *handle_hi)
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
static void c32_copy_open_reply_to_handle6(C32_NWFILE_HANDLE6 *dst,
|
||||
const uint8 *src)
|
||||
{
|
||||
/*
|
||||
* NCP 74 File Server Copy and NCP 66 Close File both take a six-byte
|
||||
* server file handle. Client32's NCP87 Open/Create reply supplies that
|
||||
* six-byte handle at the start of the first reply fragment; the following
|
||||
* bytes are OpenCreateAction and Reserved.
|
||||
*
|
||||
* The previous patch only copied four bytes and zero-filled h[4..5]. That
|
||||
* is enough to create a visible zero-length target file, but it is not the
|
||||
* handle that NCP74/NCP66 own. The bad close leaves Client32/MARS seeing
|
||||
* the target as still open, so the fallback DOS/requester open reports
|
||||
* "File in use during a file open" for every file.
|
||||
*/
|
||||
memset(dst->h, 0, sizeof(dst->h));
|
||||
memcpy(dst->h, src, 6);
|
||||
}
|
||||
|
||||
int c32_ncp87_open_create_file(const char *path_name,
|
||||
uint16 dir_handle,
|
||||
uint8 open_create_mode,
|
||||
uint32 create_attrs,
|
||||
uint16 desired_access,
|
||||
uint16 search_attrs,
|
||||
C32_NWFILE_HANDLE6 *handle_out,
|
||||
uint32 *file_size_out,
|
||||
uint8 *open_create_action_out,
|
||||
uint16 *actual_out,
|
||||
uint16 *handle_lo_out,
|
||||
uint16 *handle_hi_out)
|
||||
{
|
||||
uint16 handle_lo, handle_hi;
|
||||
uint8 hdr[16];
|
||||
uint8 path[0x140];
|
||||
uint8 rep0[0x180];
|
||||
uint8 rep1[0x40];
|
||||
uint8 rawout[32];
|
||||
uint16 raw_ret_ax, raw_ret_dx;
|
||||
uint16 actual_lo;
|
||||
UI path_len;
|
||||
int rc;
|
||||
|
||||
if (handle_out)
|
||||
memset(handle_out, 0, sizeof(*handle_out));
|
||||
if (file_size_out) *file_size_out = 0;
|
||||
if (open_create_action_out) *open_create_action_out = 0;
|
||||
if (actual_out) *actual_out = 0;
|
||||
if (handle_lo_out) *handle_lo_out = 0;
|
||||
if (handle_hi_out) *handle_hi_out = 0;
|
||||
|
||||
if (!path_name || !handle_out)
|
||||
return(1);
|
||||
|
||||
rc = c32_get_ncp_handle(&handle_lo, &handle_hi);
|
||||
if (rc)
|
||||
return(10 + rc);
|
||||
|
||||
/*
|
||||
* NCP 87 subfunction 1: Open/Create File or Subdirectory.
|
||||
*
|
||||
* Request payload after the NCP87 subfunction byte:
|
||||
* byte NameSpace (0 = DOS)
|
||||
* byte OpenCreateMode (OPEN/TRUNCATE/CREATE bits)
|
||||
* word SearchAttributes (Lo-Hi)
|
||||
* dword ReturnInfoMask (Lo-Hi)
|
||||
* dword CreateAttributes (Lo-Hi)
|
||||
* word DesiredAccessRights (Lo-Hi)
|
||||
* NWHandlePathStruct
|
||||
*
|
||||
* Existing C32_NCP87_Raw5_Probe users in this file send the subfunction
|
||||
* header as fragment 0 and the NWHandlePathStruct as fragment 1.
|
||||
*/
|
||||
memset(hdr, 0, sizeof(hdr));
|
||||
hdr[0] = 1; /* NCP87 subfunction 1 */
|
||||
hdr[1] = 0; /* DOS namespace */
|
||||
hdr[2] = open_create_mode;
|
||||
c32_put_word_lh(hdr + 3, search_attrs);
|
||||
c32_put_dword_lh(hdr + 5, 0x00000FFFUL); /* RIM_ALL, keeps size handy */
|
||||
c32_put_dword_lh(hdr + 9, create_attrs);
|
||||
c32_put_word_lh(hdr + 13, desired_access);
|
||||
|
||||
path_len = c32_build_handle_path_from_dos_path(path, (uint8)dir_handle,
|
||||
0, 0, path_name);
|
||||
|
||||
memset(rep0, 0, sizeof(rep0));
|
||||
memset(rep1, 0, sizeof(rep1));
|
||||
memset(rawout, 0, sizeof(rawout));
|
||||
|
||||
C32_NCP87_Raw5_Probe(handle_lo, handle_hi,
|
||||
hdr, 15,
|
||||
path, path_len,
|
||||
rep0, sizeof(rep0),
|
||||
rep1, sizeof(rep1),
|
||||
rawout);
|
||||
|
||||
raw_ret_ax = c32_get_word_lh(rawout + 14);
|
||||
raw_ret_dx = c32_get_word_lh(rawout + 16);
|
||||
actual_lo = c32_get_word_lh(rawout + 18);
|
||||
|
||||
if (actual_out) *actual_out = actual_lo;
|
||||
if (handle_lo_out) *handle_lo_out = handle_lo;
|
||||
if (handle_hi_out) *handle_hi_out = handle_hi;
|
||||
|
||||
if (raw_ret_ax != 0 || raw_ret_dx != 0)
|
||||
return(20);
|
||||
|
||||
c32_copy_open_reply_to_handle6(handle_out, rep0 + 0);
|
||||
|
||||
if (open_create_action_out)
|
||||
*open_create_action_out = rep0[6];
|
||||
|
||||
/* NetWareInfoStruct follows FileHandle[6]/OpenCreateAction/Reserved. */
|
||||
if (file_size_out)
|
||||
*file_size_out = c32_get_dword_lh(rep0 + 8 + 10);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
int c32_ncp74_file_server_copy(const C32_NWFILE_HANDLE6 *src,
|
||||
const C32_NWFILE_HANDLE6 *dst,
|
||||
uint32 src_offset,
|
||||
uint32 dst_offset,
|
||||
uint32 count,
|
||||
uint32 *copied_out)
|
||||
{
|
||||
struct {
|
||||
uint16 len;
|
||||
uint8 reserved;
|
||||
uint8 src_handle[6];
|
||||
uint8 dst_handle[6];
|
||||
uint8 src_offset[4];
|
||||
uint8 dst_offset[4];
|
||||
uint8 count[4];
|
||||
} req;
|
||||
struct {
|
||||
uint16 len;
|
||||
uint8 copied[4];
|
||||
} repl;
|
||||
|
||||
if (copied_out)
|
||||
*copied_out = 0;
|
||||
if (!src || !dst)
|
||||
return(1);
|
||||
|
||||
memset(&req, 0, sizeof(req));
|
||||
memset(&repl, 0, sizeof(repl));
|
||||
|
||||
memcpy(req.src_handle, src->h, 6);
|
||||
memcpy(req.dst_handle, dst->h, 6);
|
||||
c32_put_dword_hl(req.src_offset, src_offset);
|
||||
c32_put_dword_hl(req.dst_offset, dst_offset);
|
||||
c32_put_dword_hl(req.count, count);
|
||||
req.len = 1 + 6 + 6 + 4 + 4 + 4;
|
||||
repl.len = 4;
|
||||
|
||||
neterrno = Net_Call(0xF24A, &req, &repl);
|
||||
if (neterrno)
|
||||
return(-neterrno);
|
||||
|
||||
if (copied_out)
|
||||
*copied_out = c32_get_dword_hl(repl.copied);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
int c32_ncp66_close_file(const C32_NWFILE_HANDLE6 *handle)
|
||||
{
|
||||
struct {
|
||||
uint8 len;
|
||||
uint8 reserved;
|
||||
uint8 handle[6];
|
||||
} req;
|
||||
struct { uint8 len; } repl;
|
||||
|
||||
if (!handle)
|
||||
return(1);
|
||||
|
||||
memset(&req, 0, sizeof(req));
|
||||
memset(&repl, 0, sizeof(repl));
|
||||
|
||||
memcpy(req.handle, handle->h, 6);
|
||||
req.len = 1 + 6;
|
||||
repl.len = 0;
|
||||
|
||||
neterrno = Net_Call(0xF242, &req, &repl);
|
||||
if (neterrno)
|
||||
return(-neterrno);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
int c32_ncp87_obtain_rim_attributes(const char *name,
|
||||
uint16 dir_handle,
|
||||
uint32 *attr_out,
|
||||
|
||||
38
c32ncp.h
38
c32ncp.h
@@ -4,6 +4,44 @@
|
||||
#define C32NCP_H
|
||||
int c32_get_ncp_handle(uint16 *handle_lo, uint16 *handle_hi);
|
||||
|
||||
|
||||
typedef struct c32_nwfile_handle6 {
|
||||
uint8 h[6];
|
||||
} C32_NWFILE_HANDLE6;
|
||||
|
||||
#define C32_OC_MODE_OPEN 0x01
|
||||
#define C32_OC_MODE_TRUNCATE 0x02
|
||||
#define C32_OC_MODE_CREATE 0x08
|
||||
|
||||
#define C32_DAR_READ 0x0001
|
||||
#define C32_DAR_WRITE 0x0002
|
||||
#define C32_DAR_DENY_READ 0x0004
|
||||
#define C32_DAR_DENY_WRITE 0x0008
|
||||
#define C32_DAR_COMPAT 0x0010
|
||||
|
||||
int c32_ncp87_open_create_file(const char *path_name,
|
||||
uint16 dir_handle,
|
||||
uint8 open_create_mode,
|
||||
uint32 create_attrs,
|
||||
uint16 desired_access,
|
||||
uint16 search_attrs,
|
||||
C32_NWFILE_HANDLE6 *handle_out,
|
||||
uint32 *file_size_out,
|
||||
uint8 *open_create_action_out,
|
||||
uint16 *actual_out,
|
||||
uint16 *handle_lo_out,
|
||||
uint16 *handle_hi_out);
|
||||
|
||||
int c32_ncp74_file_server_copy(const C32_NWFILE_HANDLE6 *src,
|
||||
const C32_NWFILE_HANDLE6 *dst,
|
||||
uint32 src_offset,
|
||||
uint32 dst_offset,
|
||||
uint32 count,
|
||||
uint32 *copied_out);
|
||||
|
||||
int c32_ncp66_close_file(const C32_NWFILE_HANDLE6 *handle);
|
||||
|
||||
|
||||
int c32_ncp87_obtain_rim_attributes(const char *name,
|
||||
uint16 dir_handle,
|
||||
uint32 *attr_out,
|
||||
|
||||
78
creator.c
78
creator.c
@@ -21,6 +21,34 @@
|
||||
#define BINDERY_USER 0x0001
|
||||
#define BINDERY_GROUP 0x0002
|
||||
|
||||
#ifndef _A_RDONLY
|
||||
#define _A_RDONLY 0x01
|
||||
#endif
|
||||
#ifndef _A_HIDDEN
|
||||
#define _A_HIDDEN 0x02
|
||||
#endif
|
||||
#ifndef _A_SYSTEM
|
||||
#define _A_SYSTEM 0x04
|
||||
#endif
|
||||
#ifndef _A_SUBDIR
|
||||
#define _A_SUBDIR 0x10
|
||||
#endif
|
||||
#ifndef _A_ARCH
|
||||
#define _A_ARCH 0x20
|
||||
#endif
|
||||
|
||||
#define CREATOR_ATTR_RENAME_INHIBIT 0x00020000UL
|
||||
#define CREATOR_ATTR_DELETE_INHIBIT 0x00040000UL
|
||||
|
||||
#define CREATOR_RIGHT_S 0x01
|
||||
#define CREATOR_RIGHT_R 0x02
|
||||
#define CREATOR_RIGHT_W 0x04
|
||||
#define CREATOR_RIGHT_C 0x08
|
||||
#define CREATOR_RIGHT_E 0x10
|
||||
#define CREATOR_RIGHT_M 0x20
|
||||
#define CREATOR_RIGHT_F 0x40
|
||||
#define CREATOR_RIGHT_A 0x80
|
||||
|
||||
static void creator_usage(void)
|
||||
{
|
||||
fprintf(stdout, "Usage:\n");
|
||||
@@ -366,10 +394,53 @@ static int set_info(uint8 dhandle, char *name, uint32 bits,
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
static void creator_attr_string(uint32 attr, char *out)
|
||||
{
|
||||
out[0] = '[';
|
||||
out[1] = 'R';
|
||||
out[2] = (attr & _A_RDONLY) ? 'o' : 'w';
|
||||
out[3] = '-';
|
||||
out[4] = (attr & _A_ARCH) ? 'A' : '-';
|
||||
out[5] = '-';
|
||||
out[6] = (attr & _A_HIDDEN) ? 'H' : '-';
|
||||
if (attr & _A_SYSTEM) {
|
||||
out[7] = 'S';
|
||||
out[8] = 'y';
|
||||
} else {
|
||||
out[7] = '-';
|
||||
out[8] = '-';
|
||||
}
|
||||
memset(out + 9, '-', 8);
|
||||
out[17] = (attr & CREATOR_ATTR_DELETE_INHIBIT) ? 'D' : '-';
|
||||
out[18] = (attr & CREATOR_ATTR_RENAME_INHIBIT) ? 'R' : '-';
|
||||
out[19] = ']';
|
||||
out[20] = '\0';
|
||||
}
|
||||
|
||||
static void creator_rights_string(uint16 rights, char *out)
|
||||
{
|
||||
uint8 old = (uint8)rights;
|
||||
|
||||
out[0] = '[';
|
||||
out[1] = (old & CREATOR_RIGHT_S) ? 'S' : '-';
|
||||
out[2] = (old & CREATOR_RIGHT_R) ? 'R' : '-';
|
||||
out[3] = (old & CREATOR_RIGHT_W) ? 'W' : '-';
|
||||
out[4] = (old & CREATOR_RIGHT_C) ? 'C' : '-';
|
||||
out[5] = (old & CREATOR_RIGHT_E) ? 'E' : '-';
|
||||
out[6] = (old & CREATOR_RIGHT_M) ? 'M' : '-';
|
||||
out[7] = (old & CREATOR_RIGHT_F) ? 'F' : '-';
|
||||
out[8] = (old & CREATOR_RIGHT_A) ? 'A' : '-';
|
||||
out[9] = ']';
|
||||
out[10] = '\0';
|
||||
}
|
||||
|
||||
static int show_info(char *name, uint8 dhandle)
|
||||
{
|
||||
C32_NDIR_INFO info;
|
||||
int rc;
|
||||
char attr_text[24];
|
||||
char rights_text[12];
|
||||
|
||||
memset(&info, 0, sizeof(info));
|
||||
rc = c32_ncp87_obtain_ndir_info(tool_is_current_path(name) ? "" : name,
|
||||
@@ -381,8 +452,11 @@ static int show_info(char *name, uint8 dhandle)
|
||||
return(rc);
|
||||
}
|
||||
|
||||
creator_attr_string(info.attributes, attr_text);
|
||||
creator_rights_string(info.inherited_rights, rights_text);
|
||||
|
||||
fprintf(stdout, "File: %s\n", name);
|
||||
fprintf(stdout, "Attributes: 0x%08lX\n", (unsigned long)info.attributes);
|
||||
fprintf(stdout, "Attributes: %s (0x%08lX)\n", attr_text, (unsigned long)info.attributes);
|
||||
fprintf(stdout, "Create: "); print_dos_date(info.creation_date);
|
||||
fprintf(stdout, " "); print_dos_time(info.creation_time);
|
||||
fprintf(stdout, " creator=0x%08lX\n", (unsigned long)info.creator_id);
|
||||
@@ -393,7 +467,7 @@ static int show_info(char *name, uint8 dhandle)
|
||||
fprintf(stdout, " "); print_dos_time(info.archive_time);
|
||||
fprintf(stdout, " archiver=0x%08lX\n", (unsigned long)info.archiver_id);
|
||||
fprintf(stdout, "Access date: "); print_dos_date(info.last_access_date);
|
||||
fprintf(stdout, "\nRights mask: 0x%04X\n", (unsigned)info.inherited_rights);
|
||||
fprintf(stdout, "\nRights mask: %s (0x%04X)\n", rights_text, (unsigned)info.inherited_rights);
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
304
flagdir.c
304
flagdir.c
@@ -3,6 +3,7 @@
|
||||
#include "net.h"
|
||||
#include "c32ncp.h"
|
||||
#include <dos.h>
|
||||
#include <direct.h>
|
||||
|
||||
#define FD_NWFA_H 0x00000002UL
|
||||
#define FD_NWFA_SY 0x00000004UL
|
||||
@@ -11,6 +12,8 @@
|
||||
#define FD_NWFA_DI 0x00040000UL
|
||||
|
||||
#define FD_DIR_BITS (FD_NWFA_H | FD_NWFA_SY | FD_NWFA_P | FD_NWFA_RI | FD_NWFA_DI)
|
||||
#define FD_DM_ATTRIBUTES 0x00000002UL
|
||||
|
||||
|
||||
#ifndef _A_RDONLY
|
||||
#define _A_RDONLY 0x01
|
||||
@@ -28,6 +31,223 @@
|
||||
#define _A_ARCH 0x20
|
||||
#endif
|
||||
|
||||
|
||||
static void fd_put_dword_lh(uint8 *p, uint32 v)
|
||||
{
|
||||
p[0] = (uint8)(v & 0xff);
|
||||
p[1] = (uint8)((v >> 8) & 0xff);
|
||||
p[2] = (uint8)((v >> 16) & 0xff);
|
||||
p[3] = (uint8)((v >> 24) & 0xff);
|
||||
}
|
||||
|
||||
static uint32 fd_get_dword_lh(uint8 *p)
|
||||
{
|
||||
return((uint32)p[0] |
|
||||
((uint32)p[1] << 8) |
|
||||
((uint32)p[2] << 16) |
|
||||
((uint32)p[3] << 24));
|
||||
}
|
||||
|
||||
static int fd_copy_ncp22_name(uint8 *dst, char *src, uint8 *len_out)
|
||||
{
|
||||
char tmp[260];
|
||||
int len;
|
||||
|
||||
if (!dst || !len_out)
|
||||
return(-1);
|
||||
if (!src)
|
||||
src = "";
|
||||
|
||||
tool_upcopy(tmp, src, sizeof(tmp));
|
||||
if (strchr(tmp, '\\') || strchr(tmp, '/') || strchr(tmp, ':'))
|
||||
return(-1);
|
||||
|
||||
len = strlen(tmp);
|
||||
if (len < 1 || len > 12)
|
||||
return(-1);
|
||||
|
||||
memcpy(dst, tmp, len);
|
||||
*len_out = (uint8)len;
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int fd_ncp22_1e_obtain_attrs(char *name, uint32 *attrs)
|
||||
{
|
||||
struct {
|
||||
uint16 len;
|
||||
uint8 func;
|
||||
uint8 dirhandle;
|
||||
uint8 search_attributes;
|
||||
uint8 searchsequence[4];
|
||||
uint8 namlen;
|
||||
uint8 name[12];
|
||||
} req;
|
||||
struct {
|
||||
uint16 len;
|
||||
uint8 data[128];
|
||||
} repl;
|
||||
uint8 connid = 0;
|
||||
uint8 dhandle = 0;
|
||||
uint8 namlen = 0;
|
||||
|
||||
if (tool_current_dhandle(&connid, &dhandle))
|
||||
return(-1);
|
||||
|
||||
memset(&req, 0, sizeof(req));
|
||||
memset(&repl, 0, sizeof(repl));
|
||||
|
||||
if (fd_copy_ncp22_name(req.name, name, &namlen))
|
||||
return(-1);
|
||||
|
||||
req.func = 0x1e; /* Scan directory */
|
||||
req.dirhandle = dhandle;
|
||||
req.search_attributes = 0x16; /* hidden/system/subdir */
|
||||
U32_TO_BE32(0xffffffffUL, req.searchsequence);
|
||||
req.namlen = namlen;
|
||||
req.len = (uint16)(1 + 1 + 1 + 4 + 1 + namlen);
|
||||
repl.len = sizeof(repl.data);
|
||||
|
||||
neterrno = Net_Call(0xE200, &req, &repl);
|
||||
if (neterrno)
|
||||
return(-1);
|
||||
|
||||
/* NCP22/30 Scan Directory returns attributes at offset 8. */
|
||||
if (attrs)
|
||||
*attrs = fd_get_dword_lh(repl.data + 8);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int fd_ncp22_25_modify_attrs(char *name, uint32 attrs)
|
||||
{
|
||||
struct {
|
||||
uint16 len;
|
||||
uint8 func;
|
||||
uint8 dirhandle;
|
||||
uint8 search_attributes;
|
||||
uint8 searchsequence[4];
|
||||
uint8 change_bits[4];
|
||||
uint8 subdir[4];
|
||||
uint8 attributes[4];
|
||||
uint8 uniqueid;
|
||||
uint8 flags;
|
||||
uint8 namespace;
|
||||
uint8 namlen;
|
||||
uint8 name[12];
|
||||
uint8 rest[104];
|
||||
} req;
|
||||
struct {
|
||||
uint16 len;
|
||||
} repl;
|
||||
uint8 connid = 0;
|
||||
uint8 dhandle = 0;
|
||||
|
||||
if (tool_current_dhandle(&connid, &dhandle))
|
||||
return(-1);
|
||||
|
||||
memset(&req, 0, sizeof(req));
|
||||
memset(&repl, 0, sizeof(repl));
|
||||
|
||||
req.func = 0x25; /* Set directory/file information */
|
||||
req.dirhandle = dhandle;
|
||||
req.search_attributes = 0x16; /* hidden/system/subdir */
|
||||
U32_TO_BE32(0xffffffffUL, req.searchsequence);
|
||||
U32_TO_32(FD_DM_ATTRIBUTES, req.change_bits);
|
||||
fd_put_dword_lh(req.attributes, attrs);
|
||||
|
||||
if (fd_copy_ncp22_name(req.name, name, &req.namlen))
|
||||
return(-1);
|
||||
|
||||
req.len = sizeof(req) - sizeof(req.len);
|
||||
|
||||
neterrno = Net_Call(0xE200, &req, &repl);
|
||||
if (neterrno)
|
||||
return(-1);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
static char *fd_last_sep(char *s)
|
||||
{
|
||||
char *last = NULL;
|
||||
char *p;
|
||||
|
||||
for (p = s; *p; p++) {
|
||||
if (*p == '\\' || *p == '/' || *p == ':')
|
||||
last = p;
|
||||
}
|
||||
|
||||
return(last);
|
||||
}
|
||||
|
||||
static void fd_split_pattern(char *pattern, char *parent, int parent_size,
|
||||
char *leaf, int leaf_size)
|
||||
{
|
||||
char temp[260];
|
||||
char *sep;
|
||||
int plen;
|
||||
|
||||
parent[0] = '\0';
|
||||
leaf[0] = '\0';
|
||||
|
||||
strmaxcpy(temp, pattern, sizeof(temp) - 1);
|
||||
sep = fd_last_sep(temp);
|
||||
|
||||
if (!sep) {
|
||||
strmaxcpy(leaf, temp, leaf_size - 1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (*(sep + 1))
|
||||
strmaxcpy(leaf, sep + 1, leaf_size - 1);
|
||||
else
|
||||
strmaxcpy(leaf, "*.*", leaf_size - 1);
|
||||
|
||||
plen = (int)(sep - temp);
|
||||
if (*sep == ':' && (*(sep + 1) == '\\' || *(sep + 1) == '/'))
|
||||
plen += 2;
|
||||
else if (*sep == ':' || *sep == '\\' || *sep == '/')
|
||||
plen += 1;
|
||||
|
||||
if (plen >= parent_size)
|
||||
plen = parent_size - 1;
|
||||
|
||||
memcpy(parent, temp, plen);
|
||||
parent[plen] = '\0';
|
||||
}
|
||||
|
||||
static int fd_enter_parent(char *pattern, char *leaf, int leaf_size,
|
||||
char *oldcwd, int oldcwd_size)
|
||||
{
|
||||
char parent[260];
|
||||
|
||||
oldcwd[0] = '\0';
|
||||
fd_split_pattern(pattern, parent, sizeof(parent), leaf, leaf_size);
|
||||
|
||||
if (!leaf[0])
|
||||
strmaxcpy(leaf, "*.*", leaf_size - 1);
|
||||
|
||||
if (!parent[0])
|
||||
return(0);
|
||||
|
||||
if (!getcwd(oldcwd, oldcwd_size))
|
||||
oldcwd[0] = '\0';
|
||||
|
||||
if (chdir(parent)) {
|
||||
if (oldcwd[0])
|
||||
chdir(oldcwd);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
static void fd_leave_parent(char *oldcwd)
|
||||
{
|
||||
if (oldcwd[0])
|
||||
chdir(oldcwd);
|
||||
}
|
||||
|
||||
static int fd_current_display_path(uint8 dhandle, char *out, int max)
|
||||
{
|
||||
char path[260];
|
||||
@@ -97,7 +317,7 @@ static void fd_print_attrs(uint32 attrs)
|
||||
int any = 0;
|
||||
|
||||
if (!(attrs & FD_DIR_BITS)) {
|
||||
fprintf(stdout, "Normal\n");
|
||||
fprintf(stdout, "Normal \n");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -122,20 +342,50 @@ static void fd_print_attrs(uint32 attrs)
|
||||
any = 1;
|
||||
}
|
||||
|
||||
fprintf(stdout, "\n");
|
||||
fprintf(stdout, " \n");
|
||||
}
|
||||
|
||||
static void fd_display_header(char *path)
|
||||
{
|
||||
char up[260];
|
||||
char prefix[90];
|
||||
|
||||
tool_upcopy(up, path, sizeof(up));
|
||||
char prefix[260];
|
||||
char header[300];
|
||||
int len;
|
||||
char *p;
|
||||
|
||||
if (tool_current_prefix(prefix, sizeof(prefix)))
|
||||
prefix[0] = '\0';
|
||||
|
||||
fprintf(stdout, "%s%s \n", prefix, up);
|
||||
tool_upcopy(up, path, sizeof(up));
|
||||
|
||||
/* fd_process_one() enters the parent directory before displaying the
|
||||
* entry. Use the current NetWare prefix plus the leaf/relative name,
|
||||
* not the original F:\... argument, otherwise the drive-qualified path is
|
||||
* appended to the already changed current directory.
|
||||
*/
|
||||
strmaxcpy(header, prefix, sizeof(header) - 1);
|
||||
if (!tool_is_current_path(up) && up[0]) {
|
||||
len = strlen(header);
|
||||
if (len > 0 && header[len - 1] != ':' &&
|
||||
header[len - 1] != '\\' && header[len - 1] != '/') {
|
||||
if (len < (int)sizeof(header) - 1) {
|
||||
header[len++] = '\\';
|
||||
header[len] = '\0';
|
||||
}
|
||||
}
|
||||
if ((int)(strlen(header) + strlen(up)) < (int)sizeof(header) - 1)
|
||||
strcat(header, up);
|
||||
}
|
||||
|
||||
/* Novell FLAGDIR displays SERVER/SYS: and uses / as path separator in
|
||||
* the header line.
|
||||
*/
|
||||
for (p = header; *p; p++) {
|
||||
if (*p == '\\')
|
||||
*p = '/';
|
||||
}
|
||||
|
||||
fprintf(stdout, "%s \n", header);
|
||||
}
|
||||
|
||||
static void fd_display_row(char *name, uint32 attrs)
|
||||
@@ -169,6 +419,9 @@ static int fd_is_directory(char *path)
|
||||
|
||||
static int fd_obtain(char *path, uint8 dhandle, uint32 *attrs)
|
||||
{
|
||||
if (!fd_ncp22_1e_obtain_attrs(path, attrs))
|
||||
return(0);
|
||||
|
||||
if (c32_ncp87_obtain_rim_attributes(path, (uint16)dhandle,
|
||||
attrs, NULL, NULL, NULL) == 0)
|
||||
return(0);
|
||||
@@ -177,6 +430,9 @@ static int fd_obtain(char *path, uint8 dhandle, uint32 *attrs)
|
||||
|
||||
static int fd_modify(char *path, uint8 dhandle, uint32 attrs)
|
||||
{
|
||||
if (!fd_ncp22_25_modify_attrs(path, attrs))
|
||||
return(0);
|
||||
|
||||
if (c32_ncp87_modify_dos_attributes(path, (uint16)dhandle, attrs,
|
||||
NULL, NULL, NULL) == 0)
|
||||
return(0);
|
||||
@@ -187,16 +443,35 @@ static int fd_process_one(char *path, char *display_path, uint8 dhandle,
|
||||
uint32 setbits, uint32 clearbits,
|
||||
int have_change, int show_header)
|
||||
{
|
||||
char leaf[260];
|
||||
char oldcwd[260];
|
||||
char *ncp_path;
|
||||
char *check_path;
|
||||
uint32 attrs;
|
||||
uint32 newattrs;
|
||||
int rc = 0;
|
||||
|
||||
if (!fd_is_directory(path)) {
|
||||
fprintf(stderr, "Directory %s not found.\n", path);
|
||||
return(1);
|
||||
oldcwd[0] = '\0';
|
||||
leaf[0] = '\0';
|
||||
|
||||
if (!tool_is_current_path(path)) {
|
||||
if (fd_enter_parent(path, leaf, sizeof(leaf), oldcwd, sizeof(oldcwd))) {
|
||||
fprintf(stderr, "Directory %s not found.\n", path);
|
||||
return(1);
|
||||
}
|
||||
check_path = leaf;
|
||||
ncp_path = leaf;
|
||||
} else {
|
||||
check_path = path;
|
||||
ncp_path = "";
|
||||
}
|
||||
|
||||
ncp_path = tool_is_current_path(path) ? "" : path;
|
||||
if (!fd_is_directory(check_path)) {
|
||||
fd_display_header(ncp_path[0] ? ncp_path : path);
|
||||
fprintf(stdout, "Directory %s not found.", ncp_path[0] ? ncp_path : path);
|
||||
fd_leave_parent(oldcwd);
|
||||
return(1);
|
||||
}
|
||||
|
||||
if (fd_obtain(ncp_path, dhandle, &attrs)) {
|
||||
if (tool_is_current_path(path) && display_path && !display_path[0] &&
|
||||
@@ -204,6 +479,7 @@ static int fd_process_one(char *path, char *display_path, uint8 dhandle,
|
||||
attrs = 0;
|
||||
} else {
|
||||
fprintf(stderr, "Unable to get directory attributes.\n");
|
||||
fd_leave_parent(oldcwd);
|
||||
return(1);
|
||||
}
|
||||
}
|
||||
@@ -213,6 +489,7 @@ static int fd_process_one(char *path, char *display_path, uint8 dhandle,
|
||||
if (newattrs != attrs) {
|
||||
if (fd_modify(ncp_path, dhandle, newattrs)) {
|
||||
fprintf(stderr, "Unable to change attributes.\n");
|
||||
fd_leave_parent(oldcwd);
|
||||
return(1);
|
||||
}
|
||||
attrs = newattrs;
|
||||
@@ -221,11 +498,12 @@ static int fd_process_one(char *path, char *display_path, uint8 dhandle,
|
||||
}
|
||||
|
||||
if (show_header)
|
||||
fd_display(display_path, attrs);
|
||||
fd_display(ncp_path[0] ? ncp_path : display_path, attrs);
|
||||
else
|
||||
fd_display_row(display_path, attrs);
|
||||
fd_display_row(ncp_path[0] ? ncp_path : display_path, attrs);
|
||||
|
||||
return(0);
|
||||
fd_leave_parent(oldcwd);
|
||||
return(rc);
|
||||
}
|
||||
|
||||
static int fd_process_wild(char *spec, uint8 dhandle,
|
||||
|
||||
690
ndir.c
690
ndir.c
@@ -30,12 +30,27 @@
|
||||
#define _A_ARCH 0x20
|
||||
#endif
|
||||
|
||||
#define NDIR_ATTR_RENAME_INHIBIT 0x00020000UL
|
||||
#define NDIR_ATTR_DELETE_INHIBIT 0x00040000UL
|
||||
#define NDIR_MAX_SCAN_ENTRIES 160
|
||||
|
||||
#define NDIR_OPT_FILES_ONLY 0x0001
|
||||
#define NDIR_OPT_DIRS_ONLY 0x0002
|
||||
#define NDIR_OPT_RIGHTS 0x0004
|
||||
#define NDIR_OPT_DATES 0x0008
|
||||
#define NDIR_OPT_SUB 0x0010
|
||||
#define NDIR_OPT_SHORT 0x0020
|
||||
#define NDIR_OPT_FILTER_H 0x0040
|
||||
#define NDIR_OPT_FILTER_RO 0x0080
|
||||
#define NDIR_OPT_FILTER_SY 0x0100
|
||||
#define NDIR_OPT_FILTER_A 0x0200
|
||||
#define NDIR_OPT_FILTER_NOT 0x0400
|
||||
#define NDIR_OPT_FILTER_ANY (NDIR_OPT_FILTER_H|NDIR_OPT_FILTER_RO|NDIR_OPT_FILTER_SY|NDIR_OPT_FILTER_A)
|
||||
|
||||
static int ndir_collect_subtotals = 0;
|
||||
static int ndir_sub_file_count = 0;
|
||||
static unsigned long ndir_sub_total_bytes = 0L;
|
||||
static unsigned long ndir_sub_total_blocks = 0L;
|
||||
|
||||
/* NCP effective-rights bits returned by NCP87 subfunction 29. */
|
||||
#define NDIR_NCP_RIGHT_READ 0x0001
|
||||
@@ -62,6 +77,7 @@ static void ndir_dos_datetime(unsigned date, unsigned time, char *out);
|
||||
|
||||
static void ndir_usage(void)
|
||||
{
|
||||
fprintf(stdout, "\n");
|
||||
fprintf(stdout, "usage: NDIR [path] [/option...]\n");
|
||||
fprintf(stdout, "path: [path] [filename] [,filename, ...] (up to 16 in chain)\n");
|
||||
fprintf(stdout, "options: [format], [flag], [sortspec], [restriction], [FO] (files only),\n");
|
||||
@@ -81,8 +97,8 @@ static void ndir_usage(void)
|
||||
fprintf(stdout, " ACcess <operator> <date>\n");
|
||||
fprintf(stdout, " ARchive <operator> <date>\n");
|
||||
fprintf(stdout, "\n");
|
||||
fprintf(stdout, "operator: [NOT] Less than, GReater than,\n");
|
||||
fprintf(stdout, " EQual to, BEfore, AFter\n");
|
||||
fprintf(stdout, " operator: [NOT] LEss than, GReater than,\n");
|
||||
fprintf(stdout, " EQual to, BEFore, AFTer\n");
|
||||
fprintf(stdout, "\n");
|
||||
fprintf(stdout, "To search filenames equivalent to any of the capitalized KEYWORD options\n");
|
||||
fprintf(stdout, "shown above, the filename must be preceded by a drive letter or path.\n");
|
||||
@@ -113,6 +129,31 @@ static int ndir_is_dirs_only(char *s)
|
||||
tool_strsame(s, "DIRECTORIES"));
|
||||
}
|
||||
|
||||
static int ndir_filter_option(char *s, int *flag)
|
||||
{
|
||||
if (!s || !flag) return(0);
|
||||
if (tool_strsame(s, "/H") || tool_strsame(s, "-H") || tool_strsame(s, "H")) {
|
||||
*flag = NDIR_OPT_FILTER_H; return(1);
|
||||
}
|
||||
if (tool_strsame(s, "/RO") || tool_strsame(s, "-RO") || tool_strsame(s, "RO")) {
|
||||
*flag = NDIR_OPT_FILTER_RO; return(1);
|
||||
}
|
||||
if (tool_strsame(s, "/SY") || tool_strsame(s, "-SY") || tool_strsame(s, "SY") ||
|
||||
tool_strsame(s, "/SYSTEM") || tool_strsame(s, "-SYSTEM") || tool_strsame(s, "SYSTEM")) {
|
||||
*flag = NDIR_OPT_FILTER_SY; return(1);
|
||||
}
|
||||
if (tool_strsame(s, "/A") || tool_strsame(s, "-A") || tool_strsame(s, "A")) {
|
||||
*flag = NDIR_OPT_FILTER_A; return(1);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int ndir_is_not(char *s)
|
||||
{
|
||||
if (!s) return(0);
|
||||
return(tool_strsame(s, "/NOT") || tool_strsame(s, "-NOT") || tool_strsame(s, "NOT"));
|
||||
}
|
||||
|
||||
static int ndir_is_continuous(char *s)
|
||||
{
|
||||
if (!s) return(0);
|
||||
@@ -205,13 +246,13 @@ static void ndir_dos_date(unsigned date, char *out)
|
||||
month = (date >> 5) & 0x0f;
|
||||
day = date & 0x1f;
|
||||
|
||||
sprintf(out, "%02d-%02d-%02d", month, day, year % 100);
|
||||
sprintf(out, "%d-%02d-%02d", month, day, year % 100);
|
||||
}
|
||||
|
||||
static void ndir_dos_datetime_or_blank(unsigned date, unsigned time, char *out)
|
||||
{
|
||||
if (!date) {
|
||||
strcpy(out, "0-00-00 0:00 A");
|
||||
strcpy(out, "0-00-00 0:00");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -250,7 +291,12 @@ static void ndir_dos_datetime(unsigned date, unsigned time, char *out)
|
||||
else if (hour > 12)
|
||||
hour -= 12;
|
||||
|
||||
sprintf(out, "%02d-%02d-%02d %2d:%02d%c",
|
||||
/*
|
||||
* Novell NDIR keeps the date/time column at 15 chars:
|
||||
* 5-28-26 10:00a
|
||||
* 5-28-26 9:00a
|
||||
*/
|
||||
sprintf(out, "%d-%02d-%02d %2d:%02d%c",
|
||||
month, day, year % 100, hour, minute, ap);
|
||||
}
|
||||
|
||||
@@ -267,21 +313,133 @@ static unsigned long ndir_blocks_for_size(unsigned long size)
|
||||
return((size + 4095L) / 4096L);
|
||||
}
|
||||
|
||||
static void ndir_flags(unsigned attr, char *out)
|
||||
static void ndir_flags(uint32 attr, char *out)
|
||||
{
|
||||
/*
|
||||
* Keep the first positions close to Novell's default NDIR display,
|
||||
* for example [RW-A------------].
|
||||
*/
|
||||
/* Novell NDIR default flag field: [Rw-A--Sy--------DR]. */
|
||||
out[0] = '[';
|
||||
out[1] = 'R';
|
||||
out[2] = (attr & _A_RDONLY) ? 'O' : 'W';
|
||||
out[3] = (attr & _A_SYSTEM) ? 'S' : '-';
|
||||
out[2] = (attr & _A_RDONLY) ? 'o' : 'w';
|
||||
out[3] = '-';
|
||||
out[4] = (attr & _A_ARCH) ? 'A' : '-';
|
||||
out[5] = (attr & _A_HIDDEN) ? 'H' : '-';
|
||||
memset(out + 6, '-', 11);
|
||||
out[17] = ']';
|
||||
out[18] = '\0';
|
||||
out[5] = '-';
|
||||
out[6] = (attr & _A_HIDDEN) ? 'H' : '-';
|
||||
if (attr & _A_SYSTEM) {
|
||||
out[7] = 'S';
|
||||
out[8] = 'y';
|
||||
} else {
|
||||
out[7] = '-';
|
||||
out[8] = '-';
|
||||
}
|
||||
memset(out + 9, '-', 8);
|
||||
out[17] = (attr & NDIR_ATTR_DELETE_INHIBIT) ? 'D' : '-';
|
||||
out[18] = (attr & NDIR_ATTR_RENAME_INHIBIT) ? 'R' : '-';
|
||||
out[19] = ']';
|
||||
out[20] = '\0';
|
||||
}
|
||||
|
||||
typedef struct ndir_find_entry {
|
||||
struct find_t ff;
|
||||
uint32 attrs;
|
||||
uint32 owner_id;
|
||||
uint16 create_date;
|
||||
uint16 create_time;
|
||||
uint16 modify_date;
|
||||
uint16 modify_time;
|
||||
uint16 archive_date;
|
||||
uint16 archive_time;
|
||||
uint16 access_date;
|
||||
uint16 inherited_rights;
|
||||
int have_info;
|
||||
} NDIR_FIND_ENTRY;
|
||||
|
||||
static void ndir_split_name_ext(char *src, char *name, char *ext)
|
||||
{
|
||||
char tmp[20];
|
||||
char *dot;
|
||||
|
||||
strmaxcpy(tmp, src ? src : "", sizeof(tmp) - 1);
|
||||
dot = strrchr(tmp, '.');
|
||||
if (dot) {
|
||||
*dot++ = '\0';
|
||||
strmaxcpy(ext, dot, 3);
|
||||
} else {
|
||||
ext[0] = '\0';
|
||||
}
|
||||
strmaxcpy(name, tmp, 13);
|
||||
}
|
||||
|
||||
static int ndir_name_cmp(char *a, char *b)
|
||||
{
|
||||
char aa[20];
|
||||
char bb[20];
|
||||
tool_upcopy(aa, a, sizeof(aa));
|
||||
tool_upcopy(bb, b, sizeof(bb));
|
||||
return(strcmp(aa, bb));
|
||||
}
|
||||
|
||||
static void ndir_sort_entries(NDIR_FIND_ENTRY *list, int count)
|
||||
{
|
||||
int i, j;
|
||||
for (i = 0; i < count; i++) {
|
||||
for (j = i + 1; j < count; j++) {
|
||||
if (ndir_name_cmp(list[i].ff.name, list[j].ff.name) > 0) {
|
||||
NDIR_FIND_ENTRY tmp = list[i];
|
||||
list[i] = list[j];
|
||||
list[j] = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void ndir_format_owner(uint32 objid, char *out, int max)
|
||||
{
|
||||
uint16 objtyp;
|
||||
uint8 objname[50];
|
||||
|
||||
if (objid && !ncp_17_36(objid, objname, &objtyp)) {
|
||||
strmaxcpy(out, (char *)objname, max - 1);
|
||||
return;
|
||||
}
|
||||
|
||||
/* All files created by the test setup are owned by SUPERVISOR. */
|
||||
strmaxcpy(out, "SUPERVISOR", max - 1);
|
||||
}
|
||||
|
||||
static void ndir_format_number(unsigned long value, char *out)
|
||||
{
|
||||
char tmp[20];
|
||||
int len;
|
||||
int first;
|
||||
int pos = 0;
|
||||
int i;
|
||||
|
||||
sprintf(tmp, "%lu", value);
|
||||
len = strlen(tmp);
|
||||
first = len % 3;
|
||||
if (!first) first = 3;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
if (i && ((i - first) % 3) == 0)
|
||||
out[pos++] = ',';
|
||||
out[pos++] = tmp[i];
|
||||
}
|
||||
out[pos] = '\0';
|
||||
}
|
||||
|
||||
static int ndir_attr_filter_match(uint32 attr, int options)
|
||||
{
|
||||
int have = 0;
|
||||
int match = 1;
|
||||
|
||||
if (options & NDIR_OPT_FILTER_H) { have = 1; match = match && ((attr & _A_HIDDEN) != 0); }
|
||||
if (options & NDIR_OPT_FILTER_RO) { have = 1; match = match && ((attr & _A_RDONLY) != 0); }
|
||||
if (options & NDIR_OPT_FILTER_SY) { have = 1; match = match && ((attr & _A_SYSTEM) != 0); }
|
||||
if (options & NDIR_OPT_FILTER_A) { have = 1; match = match && ((attr & _A_ARCH) != 0); }
|
||||
|
||||
if (!have) return(1);
|
||||
if (options & NDIR_OPT_FILTER_NOT)
|
||||
return(!match);
|
||||
return(match);
|
||||
}
|
||||
|
||||
static void ndir_parent_path(char *dst, char *src, int max)
|
||||
@@ -318,6 +476,93 @@ static void ndir_old_rights_string(uint8 old_rights, char *out)
|
||||
out[8] = '\0';
|
||||
}
|
||||
|
||||
|
||||
static uint32 ndir_get_dword_lh(uint8 *p)
|
||||
{
|
||||
return((uint32)p[0] |
|
||||
((uint32)p[1] << 8) |
|
||||
((uint32)p[2] << 16) |
|
||||
((uint32)p[3] << 24));
|
||||
}
|
||||
|
||||
static int ndir_copy_ncp22_name(uint8 *dst, char *src, uint8 *len_out)
|
||||
{
|
||||
char tmp[260];
|
||||
int len;
|
||||
|
||||
if (!dst || !len_out)
|
||||
return(-1);
|
||||
if (!src)
|
||||
src = "";
|
||||
|
||||
tool_upcopy(tmp, src, sizeof(tmp));
|
||||
if (strchr(tmp, '\\') || strchr(tmp, '/') || strchr(tmp, ':'))
|
||||
return(-1);
|
||||
|
||||
len = strlen(tmp);
|
||||
if (len < 1 || len > 12)
|
||||
return(-1);
|
||||
|
||||
memcpy(dst, tmp, len);
|
||||
*len_out = (uint8)len;
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int ndir_ncp22_scan_entry(char *name, int want_dir, uint32 *attrs)
|
||||
{
|
||||
struct {
|
||||
uint16 len;
|
||||
uint8 func;
|
||||
uint8 dirhandle;
|
||||
uint8 search_attributes;
|
||||
uint8 searchsequence[4];
|
||||
uint8 namlen;
|
||||
uint8 name[12];
|
||||
} req;
|
||||
struct {
|
||||
uint16 len;
|
||||
uint8 data[128];
|
||||
} repl;
|
||||
uint8 connid = 0;
|
||||
uint8 dhandle = 0;
|
||||
uint8 namlen = 0;
|
||||
|
||||
if (tool_current_dhandle(&connid, &dhandle))
|
||||
return(-1);
|
||||
|
||||
memset(&req, 0, sizeof(req));
|
||||
memset(&repl, 0, sizeof(repl));
|
||||
|
||||
if (ndir_copy_ncp22_name(req.name, name, &namlen))
|
||||
return(-1);
|
||||
|
||||
req.func = 0x1e; /* NCP22/30 Scan Directory */
|
||||
req.dirhandle = dhandle;
|
||||
req.search_attributes = want_dir ? 0x16 : 0x06;
|
||||
/* FLAG uses 0x06 for file scans; FLAGDIR uses 0x16 for directories. */
|
||||
U32_TO_BE32(0xffffffffUL, req.searchsequence);
|
||||
req.namlen = namlen;
|
||||
req.len = (uint16)(1 + 1 + 1 + 4 + 1 + namlen);
|
||||
repl.len = sizeof(repl.data);
|
||||
|
||||
neterrno = Net_Call(0xE200, &req, &repl);
|
||||
if (neterrno)
|
||||
return(-1);
|
||||
|
||||
/*
|
||||
* NCP22/30 returns the old directory-scan structure. The first fields are:
|
||||
* dword searchsequence
|
||||
* dword directory entry number
|
||||
* dword attributes
|
||||
* This is the same legacy scan path used by Novell NDIR/FLAGDIR before the
|
||||
* Client32 namespace calls are used for richer metadata.
|
||||
*/
|
||||
if (attrs)
|
||||
*attrs = ndir_get_dword_lh(repl.data + 8);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int ndir_get_ncp_info(char *path, C32_NDIR_INFO *info)
|
||||
{
|
||||
uint8 connid = 0;
|
||||
@@ -414,135 +659,248 @@ static int ndir_is_dot_dir(char *name)
|
||||
return(0);
|
||||
}
|
||||
|
||||
static void ndir_print_file(char *dir, struct find_t *ff, int options,
|
||||
static void ndir_print_file(char *dir, NDIR_FIND_ENTRY *ent, int options,
|
||||
int *line_count, int *continuous)
|
||||
{
|
||||
char dt[24];
|
||||
char d[12];
|
||||
char fl[20]; /* [RW-A------------] plus NUL */
|
||||
char fl[24];
|
||||
char path[260];
|
||||
char eff[10];
|
||||
char inh[10];
|
||||
char arch[24];
|
||||
char acc[12];
|
||||
char crea[24];
|
||||
C32_NDIR_INFO info;
|
||||
int have_info = 0;
|
||||
char owner[50];
|
||||
char n[16];
|
||||
char e[6];
|
||||
|
||||
tool_join_path(path, dir, ff->name, sizeof(path));
|
||||
have_info = !ndir_get_ncp_info(path, &info);
|
||||
tool_join_path(path, dir, ent->ff.name, sizeof(path));
|
||||
|
||||
if (have_info)
|
||||
ndir_dos_datetime(info.modify_date, info.modify_time, dt);
|
||||
if (ent->have_info)
|
||||
ndir_dos_datetime(ent->modify_date, ent->modify_time, dt);
|
||||
else
|
||||
ndir_dos_datetime(ff->wr_date, ff->wr_time, dt);
|
||||
ndir_dos_datetime(ent->ff.wr_date, ent->ff.wr_time, dt);
|
||||
|
||||
ndir_dos_date(ff->wr_date, d);
|
||||
ndir_flags(ff->attrib, fl);
|
||||
ndir_dos_date(ent->ff.wr_date, d);
|
||||
ndir_flags(ent->attrs, fl);
|
||||
ndir_split_name_ext(ent->ff.name, n, e);
|
||||
ndir_format_owner(ent->owner_id, owner, sizeof(owner));
|
||||
|
||||
if (options & NDIR_OPT_RIGHTS) {
|
||||
ndir_effective_rights(path, eff);
|
||||
ndir_inherited_rights(path, inh);
|
||||
fprintf(stdout, "%-16.16s %-18.18s [%8.8s] [%8.8s]\n",
|
||||
ff->name, fl, inh, eff);
|
||||
fprintf(stdout, "%-14.14s%-3.3s %-20.20s [%8.8s] [%8.8s] %-13.13s\n",
|
||||
n, e, fl, inh, eff, owner);
|
||||
} else if (options & NDIR_OPT_DATES) {
|
||||
/*
|
||||
* DOS findfirst gives us the update timestamp only. Keep the Novell
|
||||
* /DATES layout and use placeholders for archive/access data until
|
||||
* full NetWare namespace date fields are available.
|
||||
*/
|
||||
if (have_info) {
|
||||
ndir_dos_datetime_or_blank(info.archive_date, info.archive_time, arch);
|
||||
ndir_dos_date_or_blank(info.last_access_date, acc);
|
||||
ndir_dos_datetime_or_blank(info.creation_date, info.creation_time, crea);
|
||||
fprintf(stdout, "%-16.16s %-17.17s %-17.17s %-8.8s %-17.17s\n",
|
||||
ff->name, dt, arch, acc, crea);
|
||||
char archive_mark;
|
||||
if (ent->have_info) {
|
||||
ndir_dos_datetime_or_blank(ent->archive_date, ent->archive_time, arch);
|
||||
ndir_dos_date_or_blank(ent->access_date, acc);
|
||||
ndir_dos_datetime_or_blank(ent->create_date, ent->create_time, crea);
|
||||
} else {
|
||||
fprintf(stdout, "%-16.16s %-17.17s 0-00-00 0:00 A %-8.8s %-17.17s\n",
|
||||
ff->name, dt, d, dt);
|
||||
strcpy(arch, "0-00-00 0:00");
|
||||
strmaxcpy(acc, d, sizeof(acc) - 1);
|
||||
strmaxcpy(crea, dt, sizeof(crea) - 1);
|
||||
}
|
||||
archive_mark = (ent->attrs & _A_ARCH) ? 'A' : '-';
|
||||
fprintf(stdout, "%-14.14s%-3.3s %s %s %c %s %s \n",
|
||||
n, e, dt, arch, archive_mark, acc, crea);
|
||||
} else {
|
||||
fprintf(stdout, "%-16.16s %12lu %-17.17s %-18.18s\n",
|
||||
ff->name, (unsigned long)ff->size, dt, fl);
|
||||
fprintf(stdout, "%-14.14s%-3.3s%14lu %-15.15s%-20.20s %-9.9s\n",
|
||||
n, e, (unsigned long)ent->ff.size, dt, fl, owner);
|
||||
}
|
||||
|
||||
tool_page_line(line_count, continuous);
|
||||
}
|
||||
|
||||
static void ndir_print_dir(char *dir, struct find_t *ff, int options,
|
||||
static void ndir_print_dir(char *dir, NDIR_FIND_ENTRY *ent, int options,
|
||||
int *line_count, int *continuous)
|
||||
{
|
||||
char dt[24];
|
||||
char path[260];
|
||||
char eff[10];
|
||||
char inh[10];
|
||||
char owner[50];
|
||||
C32_NDIR_INFO info;
|
||||
|
||||
tool_join_path(path, dir, ff->name, sizeof(path));
|
||||
if (!ndir_get_ncp_info(path, &info))
|
||||
tool_join_path(path, dir, ent->ff.name, sizeof(path));
|
||||
if (!ndir_get_ncp_info(path, &info)) {
|
||||
ndir_dos_datetime(info.creation_date, info.creation_time, dt);
|
||||
else
|
||||
ndir_dos_datetime(ff->wr_date, ff->wr_time, dt);
|
||||
|
||||
if (options & (NDIR_OPT_RIGHTS | NDIR_OPT_DIRS_ONLY)) {
|
||||
ndir_effective_rights(path, eff);
|
||||
ndir_inherited_rights(path, inh);
|
||||
fprintf(stdout, "%-16.16s [%8.8s] [%8.8s] %-17.17s\n",
|
||||
ff->name, inh, eff, dt);
|
||||
ndir_format_owner(info.creator_id, owner, sizeof(owner));
|
||||
} else {
|
||||
fprintf(stdout, "%-16.16s <DIR> %-17.17s\n", ff->name, dt);
|
||||
ndir_dos_datetime(ent->ff.wr_date, ent->ff.wr_time, dt);
|
||||
strcpy(owner, "SUPERVISOR");
|
||||
}
|
||||
|
||||
ndir_effective_rights(path, eff);
|
||||
ndir_inherited_rights(path, inh);
|
||||
fprintf(stdout, "%-18.18s[%8.8s] [%8.8s] %-14.14s%s \n",
|
||||
ent->ff.name, inh, eff, owner, dt);
|
||||
|
||||
tool_page_line(line_count, continuous);
|
||||
}
|
||||
|
||||
static void ndir_fill_entry_info(char *dir, NDIR_FIND_ENTRY *ent)
|
||||
{
|
||||
char path[260];
|
||||
C32_NDIR_INFO info;
|
||||
int have_ncp22_attrs;
|
||||
|
||||
ent->attrs = (uint32)ent->ff.attrib;
|
||||
|
||||
/*
|
||||
* Prefer the legacy NCP22 directory scan for the attribute word, matching
|
||||
* the Novell NDIR/FLAG trace. The NCP22 scan is handle-relative and can
|
||||
* fail when NDIR lists an explicit path without changing the current DOS
|
||||
* directory handle, so remember success explicitly instead of treating a
|
||||
* non-zero DOS attribute byte as a successful NCP attribute word.
|
||||
*/
|
||||
have_ncp22_attrs = !ndir_ncp22_scan_entry(ent->ff.name,
|
||||
(ent->ff.attrib & _A_SUBDIR) != 0,
|
||||
&ent->attrs);
|
||||
|
||||
ent->owner_id = 1L;
|
||||
ent->create_date = ent->ff.wr_date;
|
||||
ent->create_time = ent->ff.wr_time;
|
||||
ent->modify_date = ent->ff.wr_date;
|
||||
ent->modify_time = ent->ff.wr_time;
|
||||
ent->archive_date = 0;
|
||||
ent->archive_time = 0;
|
||||
ent->access_date = ent->ff.wr_date;
|
||||
ent->inherited_rights = 0xff;
|
||||
ent->have_info = 0;
|
||||
|
||||
tool_join_path(path, dir, ent->ff.name, sizeof(path));
|
||||
if (!ndir_get_ncp_info(path, &info)) {
|
||||
/* Keep attributes obtained through the legacy NCP22 scan when available. */
|
||||
if (!have_ncp22_attrs)
|
||||
ent->attrs = info.attributes;
|
||||
ent->owner_id = info.creator_id;
|
||||
ent->create_date = info.creation_date;
|
||||
ent->create_time = info.creation_time;
|
||||
ent->modify_date = info.modify_date;
|
||||
ent->modify_time = info.modify_time;
|
||||
ent->archive_date = info.archive_date;
|
||||
ent->archive_time = info.archive_time;
|
||||
ent->access_date = info.last_access_date;
|
||||
ent->inherited_rights = info.inherited_rights;
|
||||
ent->have_info = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static int ndir_collect_entries(char *dir, char *search, int want_dirs,
|
||||
int options, NDIR_FIND_ENTRY *list,
|
||||
int max_entries)
|
||||
{
|
||||
struct find_t ff;
|
||||
int rc;
|
||||
int count = 0;
|
||||
|
||||
rc = _dos_findfirst(search, _A_NORMAL | _A_RDONLY | _A_HIDDEN |
|
||||
_A_SYSTEM | _A_ARCH | _A_SUBDIR, &ff);
|
||||
while (rc == 0 && count < max_entries) {
|
||||
if (!!(ff.attrib & _A_SUBDIR) == !!want_dirs) {
|
||||
if (!want_dirs || !ndir_is_dot_dir(ff.name)) {
|
||||
list[count].ff = ff;
|
||||
ndir_fill_entry_info(dir, &list[count]);
|
||||
if (want_dirs) {
|
||||
/* Novell NDIR attribute filters apply to files only.
|
||||
* It still prints the directories header, but no directory rows.
|
||||
*/
|
||||
if (!(options & NDIR_OPT_FILTER_ANY))
|
||||
count++;
|
||||
} else if (ndir_attr_filter_match(list[count].attrs, options)) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
rc = _dos_findnext(&ff);
|
||||
}
|
||||
|
||||
ndir_sort_entries(list, count);
|
||||
return(count);
|
||||
}
|
||||
|
||||
static int ndir_scan_files(char *dir, char *search, int options,
|
||||
int *line_count, int *continuous,
|
||||
int *file_count, unsigned long *total_bytes,
|
||||
unsigned long *total_blocks)
|
||||
{
|
||||
struct find_t ff;
|
||||
int rc;
|
||||
int shown = 0;
|
||||
NDIR_FIND_ENTRY list[NDIR_MAX_SCAN_ENTRIES];
|
||||
int count;
|
||||
int i;
|
||||
|
||||
rc = _dos_findfirst(search, _A_NORMAL | _A_RDONLY | _A_HIDDEN |
|
||||
_A_SYSTEM | _A_ARCH | _A_SUBDIR, &ff);
|
||||
while (rc == 0) {
|
||||
if (!(ff.attrib & _A_SUBDIR)) {
|
||||
ndir_print_file(dir, &ff, options, line_count, continuous);
|
||||
(*file_count)++;
|
||||
*total_bytes += (unsigned long)ff.size;
|
||||
*total_blocks += ndir_blocks_for_size((unsigned long)ff.size);
|
||||
shown = 1;
|
||||
count = ndir_collect_entries(dir, search, 0, options, list,
|
||||
NDIR_MAX_SCAN_ENTRIES);
|
||||
for (i = 0; i < count; i++) {
|
||||
ndir_print_file(dir, &list[i], options, line_count, continuous);
|
||||
(*file_count)++;
|
||||
*total_bytes += (unsigned long)list[i].ff.size;
|
||||
*total_blocks += ndir_blocks_for_size((unsigned long)list[i].ff.size);
|
||||
if (ndir_collect_subtotals) {
|
||||
ndir_sub_file_count++;
|
||||
ndir_sub_total_bytes += (unsigned long)list[i].ff.size;
|
||||
ndir_sub_total_blocks += ndir_blocks_for_size((unsigned long)list[i].ff.size);
|
||||
}
|
||||
|
||||
rc = _dos_findnext(&ff);
|
||||
}
|
||||
|
||||
return(shown);
|
||||
return(count > 0);
|
||||
}
|
||||
|
||||
static int ndir_scan_dirs(char *dir, char *search, int options,
|
||||
int *line_count, int *continuous,
|
||||
int *dir_count)
|
||||
{
|
||||
struct find_t ff;
|
||||
int rc;
|
||||
int shown = 0;
|
||||
NDIR_FIND_ENTRY list[NDIR_MAX_SCAN_ENTRIES];
|
||||
int count;
|
||||
int i;
|
||||
|
||||
rc = _dos_findfirst(search, _A_NORMAL | _A_RDONLY | _A_HIDDEN |
|
||||
_A_SYSTEM | _A_ARCH | _A_SUBDIR, &ff);
|
||||
while (rc == 0) {
|
||||
if ((ff.attrib & _A_SUBDIR) && !ndir_is_dot_dir(ff.name)) {
|
||||
ndir_print_dir(dir, &ff, options, line_count, continuous);
|
||||
(*dir_count)++;
|
||||
shown = 1;
|
||||
}
|
||||
|
||||
rc = _dos_findnext(&ff);
|
||||
count = ndir_collect_entries(dir, search, 1, options, list,
|
||||
NDIR_MAX_SCAN_ENTRIES);
|
||||
for (i = 0; i < count; i++) {
|
||||
ndir_print_dir(dir, &list[i], options, line_count, continuous);
|
||||
(*dir_count)++;
|
||||
}
|
||||
|
||||
return(shown);
|
||||
return(count > 0);
|
||||
}
|
||||
|
||||
static int ndir_has_matching_entries(char *dir, char *search, int options)
|
||||
{
|
||||
NDIR_FIND_ENTRY list[NDIR_MAX_SCAN_ENTRIES];
|
||||
|
||||
if (!(options & NDIR_OPT_DIRS_ONLY)) {
|
||||
if (ndir_collect_entries(dir, search, 0, options, list, NDIR_MAX_SCAN_ENTRIES) > 0)
|
||||
return(1);
|
||||
}
|
||||
|
||||
if (!(options & NDIR_OPT_FILES_ONLY)) {
|
||||
if (ndir_collect_entries(dir, search, 1, options, list, NDIR_MAX_SCAN_ENTRIES) > 0)
|
||||
return(1);
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int ndir_has_matching_dirs(char *dir, char *search, int options)
|
||||
{
|
||||
NDIR_FIND_ENTRY list[NDIR_MAX_SCAN_ENTRIES];
|
||||
|
||||
if (options & NDIR_OPT_FILES_ONLY)
|
||||
return(0);
|
||||
|
||||
return(ndir_collect_entries(dir, search, 1, options, list, NDIR_MAX_SCAN_ENTRIES) > 0);
|
||||
}
|
||||
|
||||
static int ndir_has_matching_files(char *dir, char *search, int options)
|
||||
{
|
||||
NDIR_FIND_ENTRY list[NDIR_MAX_SCAN_ENTRIES];
|
||||
|
||||
if (options & NDIR_OPT_DIRS_ONLY)
|
||||
return(0);
|
||||
|
||||
return(ndir_collect_entries(dir, search, 0, options, list, NDIR_MAX_SCAN_ENTRIES) > 0);
|
||||
}
|
||||
|
||||
static int ndir_list_one(char *spec, int options, int *continuous)
|
||||
@@ -554,30 +912,57 @@ static int ndir_list_one(char *spec, int options, int *continuous)
|
||||
int got = 0;
|
||||
int files_shown = 0;
|
||||
int dirs_shown = 0;
|
||||
int dirs_available = 0;
|
||||
int files_available = 0;
|
||||
int dirs_header_needed = 0;
|
||||
int any_available = 0;
|
||||
int file_count = 0;
|
||||
int dir_count = 0;
|
||||
unsigned long total_bytes = 0L;
|
||||
unsigned long total_blocks = 0L;
|
||||
char num_bytes[24];
|
||||
char num_blocks[24];
|
||||
int line_count = 0;
|
||||
|
||||
ndir_split_spec(spec, dir, pat);
|
||||
tool_join_path(search, dir, pat, sizeof(search));
|
||||
|
||||
any_available = ndir_has_matching_entries(dir, search, options);
|
||||
files_available = ndir_has_matching_files(dir, search, options);
|
||||
dirs_available = ndir_has_matching_dirs(dir, search, options);
|
||||
dirs_header_needed = dirs_available;
|
||||
if ((options & NDIR_OPT_FILTER_ANY) && !(options & (NDIR_OPT_DIRS_ONLY|NDIR_OPT_FILES_ONLY)))
|
||||
dirs_header_needed = 1;
|
||||
|
||||
if (!any_available && !(options & NDIR_OPT_SHORT)) {
|
||||
if (options & NDIR_OPT_DIRS_ONLY) {
|
||||
fprintf(stdout, "No files of given specification found or directory is empty.\n");
|
||||
} else {
|
||||
fprintf(stdout, " 0 total bytes in 0 files\n");
|
||||
fprintf(stdout, " 0 total bytes in 0 blocks\n");
|
||||
fprintf(stdout, "\n");
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
tool_header_path(display, dir, sizeof(display));
|
||||
fprintf(stdout, "%s\n", display);
|
||||
if (!(options & NDIR_OPT_SHORT))
|
||||
fprintf(stdout, "\n");
|
||||
tool_page_line(&line_count, continuous);
|
||||
|
||||
if (!(options & NDIR_OPT_DIRS_ONLY)) {
|
||||
if (!(options & NDIR_OPT_DIRS_ONLY) && files_available) {
|
||||
if (!(options & NDIR_OPT_SHORT)) {
|
||||
if (options & NDIR_OPT_RIGHTS) {
|
||||
fprintf(stdout, " Inherited Effective\n");
|
||||
fprintf(stdout, "Files: Flags Rights Rights Owner\n");
|
||||
fprintf(stdout, "---------------- ------------------ ----------- ----------- --------\n");
|
||||
fprintf(stdout, "----------------- -------------------- ----------------------- ---------\n");
|
||||
} else if (options & NDIR_OPT_DATES) {
|
||||
fprintf(stdout, "Files: Last Updated Last Archived Accessed Created/Copied\n");
|
||||
fprintf(stdout, "---------------- ----------------- ----------------- -------- -----------------\n");
|
||||
fprintf(stdout, "Files: Last Updated Last Archived * Accessed Created/Copied\n");
|
||||
fprintf(stdout, "----------------- --------------- ----------------- -------- ----------------\n");
|
||||
} else {
|
||||
fprintf(stdout, "Files: Size Last Updated Flags Owner\n");
|
||||
fprintf(stdout, "---------------- ---------------- ----------------- ------------------ --------\n");
|
||||
fprintf(stdout, "----------------- ------------- --------------- -------------------- ---------\n");
|
||||
}
|
||||
tool_page_line(&line_count, continuous);
|
||||
tool_page_line(&line_count, continuous);
|
||||
@@ -586,45 +971,66 @@ static int ndir_list_one(char *spec, int options, int *continuous)
|
||||
files_shown = ndir_scan_files(dir, search, options, &line_count,
|
||||
continuous, &file_count,
|
||||
&total_bytes, &total_blocks);
|
||||
if (files_shown)
|
||||
if (files_shown) {
|
||||
got = 1;
|
||||
if ((options & NDIR_OPT_DATES) && !(options & NDIR_OPT_SHORT))
|
||||
fprintf(stdout, "* Files marked A are flagged for subsequent archiving.\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (!(options & NDIR_OPT_FILES_ONLY)) {
|
||||
if (!(options & NDIR_OPT_DIRS_ONLY) && !(options & NDIR_OPT_SHORT))
|
||||
fprintf(stdout, "\n");
|
||||
|
||||
if (!(options & NDIR_OPT_FILES_ONLY) && dirs_header_needed) {
|
||||
if (!(options & NDIR_OPT_SHORT)) {
|
||||
if (options & (NDIR_OPT_RIGHTS | NDIR_OPT_DIRS_ONLY)) {
|
||||
fprintf(stdout, "Directories: Rights Rights Owner Created/Copied\n");
|
||||
fprintf(stdout, "---------------- ----------- ----------- ----------- -----------------\n");
|
||||
} else {
|
||||
fprintf(stdout, "Directories:\n");
|
||||
fprintf(stdout, "----------------\n");
|
||||
}
|
||||
if (options & NDIR_OPT_DIRS_ONLY)
|
||||
fprintf(stdout, "\n");
|
||||
else if (files_shown)
|
||||
fprintf(stdout, "\n");
|
||||
else if (!files_available)
|
||||
fprintf(stdout, "\n");
|
||||
|
||||
fprintf(stdout, " Inherited Effective\n");
|
||||
fprintf(stdout, "Directories: Rights Rights Owner Created/Copied\n");
|
||||
fprintf(stdout, "----------------- ----------------------- ------------ ----------------\n");
|
||||
tool_page_line(&line_count, continuous);
|
||||
tool_page_line(&line_count, continuous);
|
||||
}
|
||||
|
||||
dirs_shown = ndir_scan_dirs(dir, search, options, &line_count,
|
||||
continuous, &dir_count);
|
||||
if (dirs_shown)
|
||||
got = 1;
|
||||
if (dirs_available) {
|
||||
dirs_shown = ndir_scan_dirs(dir, search, options, &line_count,
|
||||
continuous, &dir_count);
|
||||
if (dirs_shown)
|
||||
got = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!got && (options & NDIR_OPT_DIRS_ONLY) && !(options & NDIR_OPT_SHORT))
|
||||
fprintf(stdout, "No files of given specification found or directory is empty.\n");
|
||||
|
||||
if (!(options & NDIR_OPT_DIRS_ONLY)) {
|
||||
if (options & NDIR_OPT_SHORT) {
|
||||
if (file_count)
|
||||
fprintf(stdout, " %lu bytes, %d files, %lu blocks\n",
|
||||
total_bytes, file_count, total_blocks);
|
||||
if (options & NDIR_OPT_SHORT) {
|
||||
if (file_count)
|
||||
fprintf(stdout, " %lu bytes, %d files, %lu blocks\n",
|
||||
total_bytes, file_count, total_blocks);
|
||||
} else if (options & NDIR_OPT_DIRS_ONLY) {
|
||||
fprintf(stdout, "\n");
|
||||
fprintf(stdout, " 0 total bytes in 0 files\n");
|
||||
fprintf(stdout, " 0 total bytes in 0 blocks\n");
|
||||
fprintf(stdout, "\n");
|
||||
} else {
|
||||
ndir_format_number(total_bytes, num_bytes);
|
||||
ndir_format_number(total_blocks * 4096L, num_blocks);
|
||||
if (file_count == 0 && ndir_collect_subtotals && dirs_shown) {
|
||||
/* Novell does not print an extra empty totals block for recursive
|
||||
* directory-only intermediate sections. The following subdirectory
|
||||
* header provides the visible separation. */
|
||||
} else {
|
||||
fprintf(stdout, "\n");
|
||||
fprintf(stdout, "%12lu bytes in %5d files\n", total_bytes, file_count);
|
||||
fprintf(stdout, "%12lu bytes in %5lu blocks\n", total_blocks * 4096L,
|
||||
total_blocks);
|
||||
if (file_count == 0) {
|
||||
fprintf(stdout, "%13s total bytes in %5d files\n", num_bytes, file_count);
|
||||
fprintf(stdout, "%13s total bytes in %5lu blocks\n", num_blocks, total_blocks);
|
||||
fprintf(stdout, "\n");
|
||||
} else {
|
||||
fprintf(stdout, "%13s bytes in %4d files\n", num_bytes, file_count);
|
||||
fprintf(stdout, "%13s bytes in %4lu blocks\n", num_blocks, total_blocks);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -681,8 +1087,7 @@ static int ndir_list_subdirs(char *dir, char *pattern, int options,
|
||||
tool_join_path(subdir, dir, ff.name, sizeof(subdir));
|
||||
tool_join_path(subspec, subdir, pattern, sizeof(subspec));
|
||||
|
||||
if (!(options & NDIR_OPT_SHORT) ||
|
||||
ndir_spec_has_output(subspec, options & ~NDIR_OPT_SUB)) {
|
||||
if (ndir_spec_has_output(subspec, options & ~NDIR_OPT_SUB)) {
|
||||
fprintf(stdout, "\n");
|
||||
if (ndir_list_one(subspec, options & ~NDIR_OPT_SUB, continuous))
|
||||
result = 1;
|
||||
@@ -707,17 +1112,41 @@ static int ndir_list(char *spec, int options, int *continuous)
|
||||
char dir[260];
|
||||
char pat[260];
|
||||
int result;
|
||||
char num_bytes[24];
|
||||
char num_blocks[24];
|
||||
|
||||
if (options & NDIR_OPT_SUB) {
|
||||
ndir_collect_subtotals = 1;
|
||||
ndir_sub_file_count = 0;
|
||||
ndir_sub_total_bytes = 0L;
|
||||
ndir_sub_total_blocks = 0L;
|
||||
}
|
||||
|
||||
result = ndir_list_one(spec, options & ~NDIR_OPT_SUB, continuous);
|
||||
|
||||
if (!(options & NDIR_OPT_SUB))
|
||||
if (!(options & NDIR_OPT_SUB)) {
|
||||
ndir_collect_subtotals = 0;
|
||||
return(result);
|
||||
}
|
||||
|
||||
ndir_split_spec(spec, dir, pat);
|
||||
if (!pat[0])
|
||||
strmaxcpy(pat, "*.*", sizeof(pat) - 1);
|
||||
|
||||
return(ndir_list_subdirs(dir, pat, options, continuous) ? 1 : result);
|
||||
if (ndir_list_subdirs(dir, pat, options, continuous))
|
||||
result = 1;
|
||||
|
||||
if (!(options & NDIR_OPT_SHORT) && !(options & NDIR_OPT_DIRS_ONLY)) {
|
||||
ndir_format_number(ndir_sub_total_bytes, num_bytes);
|
||||
ndir_format_number(ndir_sub_total_blocks * 4096L, num_blocks);
|
||||
fprintf(stdout, "\n");
|
||||
fprintf(stdout, "%13s total bytes in %5d files\n", num_bytes, ndir_sub_file_count);
|
||||
fprintf(stdout, "%13s total bytes in %5lu blocks\n", num_blocks, ndir_sub_total_blocks);
|
||||
fprintf(stdout, "\n");
|
||||
}
|
||||
|
||||
ndir_collect_subtotals = 0;
|
||||
return(result);
|
||||
}
|
||||
|
||||
int func_ndir(int argc, char *argv[], int mode)
|
||||
@@ -727,6 +1156,8 @@ int func_ndir(int argc, char *argv[], int mode)
|
||||
int options = 0;
|
||||
int continuous = 0;
|
||||
int i;
|
||||
int filterflag;
|
||||
int next_not = 0;
|
||||
|
||||
(void)mode;
|
||||
|
||||
@@ -736,6 +1167,24 @@ int func_ndir(int argc, char *argv[], int mode)
|
||||
}
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (ndir_is_not(argv[i])) {
|
||||
options |= NDIR_OPT_FILTER_NOT;
|
||||
next_not = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
filterflag = 0;
|
||||
if (ndir_filter_option(argv[i], &filterflag)) {
|
||||
options |= filterflag;
|
||||
next_not = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (next_not) {
|
||||
fprintf(stdout, "Type \"ndir /help\" on the command line for usage information.\n");
|
||||
return(1);
|
||||
}
|
||||
|
||||
if (ndir_is_help(argv[i])) {
|
||||
ndir_usage();
|
||||
return(0);
|
||||
@@ -794,6 +1243,11 @@ int func_ndir(int argc, char *argv[], int mode)
|
||||
have_path = 1;
|
||||
}
|
||||
|
||||
if (next_not) {
|
||||
fprintf(stdout, "Type \"ndir /help\" on the command line for usage information.\n");
|
||||
return(1);
|
||||
}
|
||||
|
||||
if ((options & NDIR_OPT_FILES_ONLY) && (options & NDIR_OPT_DIRS_ONLY)) {
|
||||
fprintf(stdout, "No files of given specification found or directory is empty.\n");
|
||||
return(1);
|
||||
|
||||
3
net.c
3
net.c
@@ -44,6 +44,9 @@ static struct s_net_functions {
|
||||
{"CREATOR","display or set creator/modifier/archive ids",func_creator,0},
|
||||
{"SLIST", "list servers", func_slist , 0},
|
||||
{"WHOAMI", "show current NetWare user", func_whoami , 0},
|
||||
#if 0 /* NCOPY disabled: unsafe/open server-side-copy work-in-progress. */
|
||||
{"NCOPY", "copy files", func_ncopy , 0},
|
||||
#endif
|
||||
{"PASSWD", "change password", func_passwd , 0},
|
||||
#if 1
|
||||
{"TESTS", "only testroutines!", func_tests , 0},
|
||||
|
||||
1
net.h
1
net.h
@@ -283,6 +283,7 @@ extern int func_revoke(int argc, char *argv[], int mode);
|
||||
extern int func_remove(int argc, char *argv[], int mode);
|
||||
extern int func_rights (int argc, char *argv[], int mode);
|
||||
extern int func_creator(int argc, char *argv[], int mode);
|
||||
extern int func_ncopy (int argc, char *argv[], int mode);
|
||||
|
||||
|
||||
extern int ncp_17_37(uint32 last_id, uint16 objtyp, uint8 *pattern,
|
||||
|
||||
184
revoke.c
184
revoke.c
@@ -10,15 +10,28 @@
|
||||
|
||||
static int revoke_last_rc = 0;
|
||||
|
||||
static void revoke_usage_error(void)
|
||||
static void revoke_usage_short(int leading_blank, int bell_first)
|
||||
{
|
||||
fprintf(stdout, "Command line arguments violate grammar defined for REVOKE.\n\n");
|
||||
if (bell_first)
|
||||
fprintf(stdout, "\a");
|
||||
if (leading_blank || bell_first)
|
||||
fprintf(stdout, "\n");
|
||||
|
||||
fprintf(stdout, "Usage: REVOKE rightslist* [FOR path] FROM [USER|GROUP] name [options]\n");
|
||||
fprintf(stdout, "Options: /SubDirectories | /Files\n");
|
||||
fprintf(stdout, " ");
|
||||
if (bell_first)
|
||||
fprintf(stdout, "\n");
|
||||
}
|
||||
|
||||
static void revoke_usage(void)
|
||||
static void revoke_usage_full(int leading_blank, int bell_before_tail)
|
||||
{
|
||||
if (leading_blank)
|
||||
fprintf(stdout, "\n");
|
||||
|
||||
fprintf(stdout, "Usage: REVOKE rightslist* [FOR path] FROM [USER|GROUP] name [options]\n");
|
||||
fprintf(stdout, "Options: /SubDirectories | /Files\n\n");
|
||||
fprintf(stdout, "Options: /SubDirectories | /Files\n");
|
||||
fprintf(stdout, " \n");
|
||||
fprintf(stdout, "286 Rights:\t\t386 Rights:\n");
|
||||
fprintf(stdout, "---------------\t\t--------------------\n");
|
||||
fprintf(stdout, "ALL = All\t\tALL = All\n");
|
||||
@@ -30,7 +43,24 @@ static void revoke_usage(void)
|
||||
fprintf(stdout, "P = Parental\t\tM = Modify\n");
|
||||
fprintf(stdout, "S = Search\t\tF = File Scan\n");
|
||||
fprintf(stdout, "M = Modify\t\tA = Access Control\n");
|
||||
fprintf(stdout, "\n* Use abbreviations listed above, separated by spaces.\n");
|
||||
fprintf(stdout, "\n");
|
||||
if (bell_before_tail)
|
||||
fprintf(stdout, "\a");
|
||||
fprintf(stdout, "* Use abbreviations listed above, separated by spaces.\n");
|
||||
}
|
||||
|
||||
static void revoke_header_path(char *out, char *path, int max)
|
||||
{
|
||||
char *p;
|
||||
|
||||
trustee_header_path(out, path, max);
|
||||
|
||||
/* Novell REVOKE displays server and volume as SERVER/SYS: while
|
||||
* RIGHTS uses SERVER\SYS:. Keep the rest of the path with DOS
|
||||
* backslashes. */
|
||||
p = strchr(out, '\\');
|
||||
if (p && strchr(out, ':') && p < strchr(out, ':'))
|
||||
*p = '/';
|
||||
}
|
||||
|
||||
static int revoke_one(char *path, uint16 dhandle, uint32 object_id,
|
||||
@@ -41,32 +71,43 @@ static int revoke_one(char *path, uint16 dhandle, uint32 object_id,
|
||||
int is_dir;
|
||||
int rc;
|
||||
|
||||
is_dir = forced_is_file ? 0 : trustee_path_is_dir(path);
|
||||
/* Without /FILES, Novell REVOKE reports directory-oriented messages even
|
||||
* if the path cannot be located. */
|
||||
is_dir = forced_is_file ? 0 : 1;
|
||||
|
||||
rc = c32_ncp87_find_trustee_rights(path, dhandle, object_id, &old_rights,
|
||||
NULL, NULL, NULL);
|
||||
revoke_last_rc = rc;
|
||||
if (rc) {
|
||||
if (rc == 0xff)
|
||||
fprintf(stdout, "No trustee for the specified %s.\n", is_dir ? "directory" : "file");
|
||||
fprintf(stdout, "\aNo trustee for the specified %s.\n", is_dir ? "directory" : "file");
|
||||
else
|
||||
fprintf(stdout, "Error scanning trustee list.\n");
|
||||
fprintf(stdout, "\aError scanning trustee list.\n");
|
||||
return(1);
|
||||
}
|
||||
|
||||
new_rights = (uint16)(old_rights & ~revoke_mask);
|
||||
|
||||
if (new_rights == 0) {
|
||||
rc = c32_ncp87_delete_trustee_rights(path, dhandle, object_id,
|
||||
NULL, NULL, NULL);
|
||||
/* Novell REVOKE removes the trustee through the old NCP22 trustee path.
|
||||
* Keep the Client32/NCP87 delete call as a compatibility fallback. */
|
||||
rc = c32_ncp22_delete_trustee_rights(path, dhandle, object_id);
|
||||
if (rc)
|
||||
rc = c32_ncp87_delete_trustee_rights(path, dhandle, object_id,
|
||||
NULL, NULL, NULL);
|
||||
revoke_last_rc = rc;
|
||||
if (rc) {
|
||||
fprintf(stdout, "Error deleting trustee.\n");
|
||||
return(1);
|
||||
}
|
||||
} else {
|
||||
rc = c32_ncp87_add_trustee_rights(path, dhandle, object_id, new_rights,
|
||||
0xffff, NULL, NULL, NULL);
|
||||
/* Updating the remaining trustee mask is the same old SetTrustee flow
|
||||
* used by GRANT. Fall back to NCP87 add-trustee if a server/client
|
||||
* does not accept NCP22/27. */
|
||||
rc = c32_ncp22_set_trustee_rights(path, dhandle, object_id, new_rights);
|
||||
if (rc)
|
||||
rc = c32_ncp87_add_trustee_rights(path, dhandle, object_id, new_rights,
|
||||
0xffff, NULL, NULL, NULL);
|
||||
revoke_last_rc = rc;
|
||||
if (rc) {
|
||||
fprintf(stdout, "Fatal error revoking access rights.\n");
|
||||
@@ -77,10 +118,45 @@ static int revoke_one(char *path, uint16 dhandle, uint32 object_id,
|
||||
{
|
||||
char header[300];
|
||||
char bracket[10];
|
||||
trustee_header_path(header, path, sizeof(header));
|
||||
revoke_header_path(header, path, sizeof(header));
|
||||
trustee_rights_bracket(new_rights, bracket);
|
||||
fprintf(stdout, "%s\n\n", header);
|
||||
fprintf(stdout, "Trustee's access rights set to [%s]\n", bracket);
|
||||
fprintf(stdout, "%s\n", header);
|
||||
fprintf(stdout, "Trustee's access rights set to [%s]\r\n\n", bracket);
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int revoke_subdirs_inner(char *path, uint16 dhandle, uint32 object_id,
|
||||
uint16 revoke_mask, int *count,
|
||||
int include_this)
|
||||
{
|
||||
struct find_t ff;
|
||||
char pattern[260];
|
||||
char child[260];
|
||||
|
||||
/* Novell REVOKE /SUBDIRECTORIES follows the REMOVE behaviour: the
|
||||
* specified start directory is a container for the recursive operation,
|
||||
* not itself part of the operation. Once a listed subdirectory reports
|
||||
* no direct trustee, Novell stops after that first failure. */
|
||||
if (include_this) {
|
||||
if (revoke_one(path, dhandle, object_id, revoke_mask, 0) == 0)
|
||||
(*count)++;
|
||||
else
|
||||
return(1);
|
||||
}
|
||||
|
||||
trustee_join_path(pattern, path, "*.*", sizeof(pattern));
|
||||
|
||||
if (_dos_findfirst(pattern, _A_SUBDIR, &ff) == 0) {
|
||||
do {
|
||||
if ((ff.attrib & _A_SUBDIR) && !trustee_is_dot_dir(ff.name)) {
|
||||
trustee_join_path(child, path, ff.name, sizeof(child));
|
||||
if (revoke_subdirs_inner(child, dhandle, object_id, revoke_mask,
|
||||
count, 1))
|
||||
return(1);
|
||||
}
|
||||
} while (_dos_findnext(&ff) == 0);
|
||||
}
|
||||
|
||||
return(0);
|
||||
@@ -89,29 +165,8 @@ static int revoke_one(char *path, uint16 dhandle, uint32 object_id,
|
||||
static int revoke_subdirs(char *path, uint16 dhandle, uint32 object_id,
|
||||
uint16 revoke_mask, int *count)
|
||||
{
|
||||
struct find_t ff;
|
||||
char pattern[260];
|
||||
char child[260];
|
||||
int rc = 0;
|
||||
|
||||
if (revoke_one(path, dhandle, object_id, revoke_mask, 0) == 0)
|
||||
(*count)++;
|
||||
else
|
||||
rc = 1;
|
||||
|
||||
trustee_join_path(pattern, path, "*.*", sizeof(pattern));
|
||||
|
||||
if (_dos_findfirst(pattern, _A_SUBDIR, &ff) == 0) {
|
||||
do {
|
||||
if ((ff.attrib & _A_SUBDIR) && !trustee_is_dot_dir(ff.name)) {
|
||||
trustee_join_path(child, path, ff.name, sizeof(child));
|
||||
if (revoke_subdirs(child, dhandle, object_id, revoke_mask, count))
|
||||
rc = 1;
|
||||
}
|
||||
} while (_dos_findnext(&ff) == 0);
|
||||
}
|
||||
|
||||
return(rc);
|
||||
return(revoke_subdirs_inner(path, dhandle, object_id, revoke_mask,
|
||||
count, 0));
|
||||
}
|
||||
|
||||
static int revoke_files(char *path, uint16 dhandle, uint32 object_id,
|
||||
@@ -175,8 +230,9 @@ int func_revoke(int argc, char *argv[], int mode)
|
||||
|
||||
if (argc < 2 || trustee_is_help(argv[1])) {
|
||||
if (argc < 2)
|
||||
revoke_usage_error();
|
||||
revoke_usage();
|
||||
revoke_usage_full(1, 1);
|
||||
else
|
||||
revoke_usage_short(1, 0);
|
||||
return(argc < 2 ? 1 : 0);
|
||||
}
|
||||
|
||||
@@ -186,8 +242,8 @@ int func_revoke(int argc, char *argv[], int mode)
|
||||
if (trustee_is_option(argv[i]))
|
||||
break;
|
||||
if (trustee_parse_right_word(argv[i], &rights)) {
|
||||
fprintf(stdout, "Invalid right specified.\n");
|
||||
revoke_usage();
|
||||
fprintf(stdout, "Invalid right specified.\n\n");
|
||||
revoke_usage_full(0, 1);
|
||||
return(1);
|
||||
}
|
||||
have_rights = 1;
|
||||
@@ -195,24 +251,21 @@ int func_revoke(int argc, char *argv[], int mode)
|
||||
}
|
||||
|
||||
if (!have_rights || i >= argc) {
|
||||
revoke_usage_error();
|
||||
revoke_usage();
|
||||
revoke_usage_short(0, 1);
|
||||
return(1);
|
||||
}
|
||||
|
||||
if (trustee_same(argv[i], "FOR")) {
|
||||
i++;
|
||||
if (i >= argc) {
|
||||
revoke_usage_error();
|
||||
revoke_usage();
|
||||
revoke_usage_short(0, 1);
|
||||
return(1);
|
||||
}
|
||||
path = argv[i++];
|
||||
}
|
||||
|
||||
if (i >= argc || !trustee_same(argv[i], "FROM")) {
|
||||
revoke_usage_error();
|
||||
revoke_usage();
|
||||
revoke_usage_short(0, 1);
|
||||
return(1);
|
||||
}
|
||||
i++;
|
||||
@@ -228,8 +281,7 @@ int func_revoke(int argc, char *argv[], int mode)
|
||||
}
|
||||
|
||||
if (i >= argc) {
|
||||
revoke_usage_error();
|
||||
revoke_usage();
|
||||
revoke_usage_short(0, 1);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@@ -237,8 +289,7 @@ int func_revoke(int argc, char *argv[], int mode)
|
||||
|
||||
while (i < argc) {
|
||||
if (!trustee_is_option(argv[i])) {
|
||||
revoke_usage_error();
|
||||
revoke_usage();
|
||||
revoke_usage_short(0, 1);
|
||||
return(1);
|
||||
}
|
||||
|
||||
@@ -254,15 +305,12 @@ int func_revoke(int argc, char *argv[], int mode)
|
||||
continue;
|
||||
}
|
||||
|
||||
revoke_usage_error();
|
||||
revoke_usage();
|
||||
revoke_usage_short(0, 1);
|
||||
return(1);
|
||||
}
|
||||
|
||||
if (use_files && use_subdirs) {
|
||||
fprintf(stdout, "Revoke cannot do both directories and files in a single pass.\n");
|
||||
return(1);
|
||||
}
|
||||
/* Novell REVOKE does not emit a grammar-specific message for /FILES plus
|
||||
* /SUBDIRECTORIES. It reports the same directory trustee failure text. */
|
||||
|
||||
if (trustee_current_dhandle(&connid, &dhandle)) {
|
||||
fprintf(stdout, "Error: Drive not mapped to Network.\n");
|
||||
@@ -272,17 +320,21 @@ int func_revoke(int argc, char *argv[], int mode)
|
||||
object_id = trustee_lookup_object(objname, &objtype, objtype_given);
|
||||
if (!object_id) {
|
||||
if (objtype_given && objtype == TRUSTEE_BINDERY_GROUP)
|
||||
fprintf(stdout, "Group \"%s\" not found.\n", objname);
|
||||
fprintf(stdout, "\aGroup \"%s\" not found.\n", objname);
|
||||
else if (objtype_given)
|
||||
fprintf(stdout, "User \"%s\" not found.\n", objname);
|
||||
fprintf(stdout, "\aUser \"%s\" not found.\n", objname);
|
||||
else
|
||||
fprintf(stdout, "User or group \"%s\" not found.\n", objname);
|
||||
fprintf(stdout, "\aUser or group \"%s\" not found.\n", objname);
|
||||
return(1);
|
||||
}
|
||||
|
||||
trustee_upcopy(objprint, objname, sizeof(objprint));
|
||||
|
||||
if (use_subdirs)
|
||||
if (use_files && use_subdirs) {
|
||||
fprintf(stdout, "\aNo trustee for the specified directory.\n");
|
||||
revoke_last_rc = 0xff;
|
||||
return(1);
|
||||
} else if (use_subdirs)
|
||||
rc = revoke_subdirs(path, (uint16)dhandle, object_id, rights, &count);
|
||||
else if (use_files)
|
||||
rc = revoke_files(path, (uint16)dhandle, object_id, rights, &count);
|
||||
@@ -292,10 +344,10 @@ int func_revoke(int argc, char *argv[], int mode)
|
||||
count = 1;
|
||||
}
|
||||
|
||||
if (use_subdirs || (!use_files && !rc))
|
||||
fprintf(stdout, "Rights for %d directories were changed for %s.\n", count, objprint);
|
||||
else if (use_files)
|
||||
fprintf(stdout, "Rights for %d files were changed for %s.\n", count, objprint);
|
||||
if ((use_subdirs || (!use_files && !rc)) && count > 0)
|
||||
fprintf(stdout, "Rights for %d directories were changed for %s.\n\n", count, objprint);
|
||||
else if (use_files && count > 0)
|
||||
fprintf(stdout, "Rights for %d files were changed for %s.\n\n", count, objprint);
|
||||
|
||||
return(rc ? (revoke_last_rc ? revoke_last_rc : 1) : 0);
|
||||
}
|
||||
|
||||
18
slist.c
18
slist.c
@@ -81,13 +81,6 @@ int func_slist(int argc, char *argv[], int mode)
|
||||
|
||||
upstr(pattern);
|
||||
|
||||
if (!explicit_server) {
|
||||
fprintf(stdout, "%-48sNetwork Node Address Status\n",
|
||||
"Known NetWare File Servers");
|
||||
fprintf(stdout, "%-48s------- ------------ ------\n",
|
||||
"--------------------------");
|
||||
}
|
||||
|
||||
while ((result = ncp_17_37(last_id, NCP_BINDERY_FSERVER,
|
||||
pattern, &obj)) == 0) {
|
||||
NW_PROPERTY prop;
|
||||
@@ -95,12 +88,15 @@ int func_slist(int argc, char *argv[], int mode)
|
||||
found++;
|
||||
last_id = obj.object_id;
|
||||
|
||||
if (explicit_server && found == 1) {
|
||||
fprintf(stdout, "%-47s", obj.object_name);
|
||||
} else {
|
||||
fprintf(stdout, "%-47s", obj.object_name);
|
||||
if (found == 1) {
|
||||
fprintf(stdout, "%-48sNetwork Node Address Status\n",
|
||||
"Known NetWare File Servers");
|
||||
fprintf(stdout, "%-48s------- ------------ ------\n",
|
||||
"--------------------------");
|
||||
}
|
||||
|
||||
fprintf(stdout, "%-47s", obj.object_name);
|
||||
|
||||
if (!ncp_17_3d(NCP_BINDERY_FSERVER, obj.object_name,
|
||||
1, "NET_ADDRESS", &prop)) {
|
||||
print_net_node_status(prop.value, found == 1);
|
||||
|
||||
@@ -1 +1,17 @@
|
||||
See README.md for the test layout. DOS-run files keep 8.3 names.
|
||||
DOS utility regression tests
|
||||
============================
|
||||
|
||||
See README.md in this directory for the GitHub/Gitea formatted test index.
|
||||
|
||||
Common result directories:
|
||||
|
||||
OUT Novell reference output
|
||||
PUBOUT current PUBLIC/LOGIN implementation output
|
||||
UNOV Novell readback as NOPASSUSER
|
||||
UPUB PUBLIC readback as NOPASSUSER
|
||||
LOUT Novell output while logged out
|
||||
LPUBOUT public LOGIN output while logged out
|
||||
|
||||
Some tests use DLYSTRT and a local C:\*TMP helper directory because LOGOUT
|
||||
removes F: and normal network mappings. Set LGNTPWD before running tests that
|
||||
need automatic re-login as SUPERVISOR.
|
||||
|
||||
121
test/README.md
121
test/README.md
@@ -1,34 +1,107 @@
|
||||
# MARS dosutils tests
|
||||
# DOS utility regression tests
|
||||
|
||||
This directory contains DOS-side regression and compatibility tests for `mars-dosutils`.
|
||||
This directory contains DOS-side comparison and regression tests for the
|
||||
`mars-dosutils` tools. The tests are meant for maintainer use against a MARS-NWE
|
||||
`SYS:` tree that also contains the original Novell tools in `SYS:NPUBLIC` and
|
||||
`SYS:NLOGIN`.
|
||||
|
||||
The tests are grouped by feature so that Novell reference-tool checks and our own tool regressions stay separated but easy to compare.
|
||||
Most tests compare captured Novell output with the current public implementation
|
||||
byte-for-byte. Some tests also switch to a normal user and read back effective
|
||||
rights, because matching command output alone is not enough for trustee tools.
|
||||
|
||||
## Directory layout
|
||||
## Output naming convention
|
||||
|
||||
| Directory | Purpose |
|
||||
| --- | --- |
|
||||
| `flag/` | File/directory attribute tests, Novell `NPUBLIC\FLAG` baseline and MARS `PUBLIC\FLAG` regression notes. |
|
||||
| `flagdir/` | Planned: directory-specific FLAG and recursive attribute tests. |
|
||||
| `grant/` | Planned: trustee grant tests. |
|
||||
| `rights/` | Planned: effective-rights and trustee readback tests. |
|
||||
| `map/` | Planned: MAP command and login-script mapping tests. |
|
||||
| `login/` | Planned: LOGIN/NLOGIN compatibility tests. |
|
||||
| `logout/` | Planned: LOGOUT/NLOGOUT compatibility tests. |
|
||||
The generated result trees use these names consistently:
|
||||
|
||||
## Naming
|
||||
```text
|
||||
OUT Novell reference output from SYS:NPUBLIC or SYS:NLOGIN
|
||||
PUBOUT current implementation output from SYS:PUBLIC or SYS:LOGIN
|
||||
COMPARE.LOG
|
||||
|
||||
DOS-executed files should use 8.3 names. Keep Novell reference tests and MARS tests close together, but name them clearly.
|
||||
UNOV Novell readback while logged in as NOPASSUSER
|
||||
UPUB public readback while logged in as NOPASSUSER
|
||||
UCOMP.LOG
|
||||
|
||||
Suggested suffixes:
|
||||
LOUT Novell output while logged out, usually from SYS:NLOGIN copy
|
||||
LPUBOUT public output while logged out, usually from SYS:LOGIN copy
|
||||
LCOMP.LOG
|
||||
```
|
||||
|
||||
- `*N.BAT` for Novell-only baseline tests using `NPUBLIC`/`NLOGIN`.
|
||||
- `*M.TST` or `*M.BAT` for MARS/dosutils tests using `PUBLIC`/`LOGIN`.
|
||||
- `*CMP.BAT` for comparison/helper scripts.
|
||||
Not every test has every directory. For example, SLIST has `LOUT`/`LPUBOUT`,
|
||||
while trustee tools usually have `UNOV`/`UPUB`.
|
||||
|
||||
## Expected workflow
|
||||
## User switching and local helpers
|
||||
|
||||
1. Run the Novell baseline test first.
|
||||
2. Check the MARS NWE server log for the expected NCP path and completion codes.
|
||||
3. Run or implement the matching MARS/dosutils regression test.
|
||||
4. Keep notes in the feature directory `README.md`.
|
||||
Tests that must survive a `LOGOUT` use `DLYSTRT.EXE` and a local helper directory
|
||||
on `C:`. This is required because logging out removes `F:` and normal network
|
||||
mappings. The common pattern is:
|
||||
|
||||
1. run the main `*STA.BAT` as `SUPERVISOR` from `F:`,
|
||||
2. copy the helper `*C.BAT`, `DLYSTRT.EXE`, and required tools to `C:\*TMP`,
|
||||
3. queue the helper with `DLYSTRT`,
|
||||
4. let the helper log out, perform the user or logged-out checks, log back in,
|
||||
5. queue `F:\*STA.BAT PART2`,
|
||||
6. compare and package the captured files.
|
||||
|
||||
For automatic re-login, set the Supervisor password before starting the test:
|
||||
|
||||
```bat
|
||||
SET LGNTPWD=your-supervisor-password
|
||||
```
|
||||
|
||||
`LGNTPWD` is used only by maintainer tests and should not be committed to any
|
||||
script or log.
|
||||
|
||||
## Test index
|
||||
|
||||
| Directory | Main script | Current purpose/status |
|
||||
| --- | --- | --- |
|
||||
| `creator/` | `CIXSTA.BAT` | CREATOR metadata/xattr test plus optional `NOPASSUSER` readback. |
|
||||
| `flag/` | `FLGTSTA.BAT` | `NPUBLIC\FLAG` vs `PUBLIC\FLAG`, including user-context readback. |
|
||||
| `flagdir/` | `FDGTSTA.BAT` | `NPUBLIC\FLAGDIR` vs `PUBLIC\FLAGDIR`, including user-context readback. |
|
||||
| `grant/` | `GRNTSTA.BAT` | `NPUBLIC\GRANT` vs `PUBLIC\GRANT`, rights matrix and `NOPASSUSER` readback. |
|
||||
| `login/` | `LGNTSTA.BAT` | Maintainer baseline for Novell LOGIN/LOGOUT/MAP flow. |
|
||||
| `logout/` | see `login/` | LOGOUT is covered by the LOGIN baseline flow. |
|
||||
| `map/` | `MAPTSTA.BAT` | Novell MAP baseline and root/non-root mapping semantics; full PUBLIC comparison still pending. |
|
||||
| `ndir/` | `NDIRTSTA.BAT` | `NPUBLIC\NDIR` vs `PUBLIC\NDIR`, matrix, filters, `/SUB`, `/RIGHTS`, user readback. |
|
||||
| `remove/` | `RMVSTA.BAT` | `NPUBLIC\REMOVE` vs `PUBLIC\REMOVE`, matrix and `NOPASSUSER` readback. |
|
||||
| `revoke/` | `RVKSTA.BAT` | `NPUBLIC\REVOKE` vs `PUBLIC\REVOKE`, matrix and `NOPASSUSER` readback. |
|
||||
| `rights/` | `RGHTSTA.BAT` | `NPUBLIC\RIGHTS` vs `PUBLIC\RIGHTS`, direct effective-rights cases. |
|
||||
| `slist/` | `SLSTSTA.BAT` | `NPUBLIC\SLIST` vs `PUBLIC\SLIST` while logged in, plus `NLOGIN\SLIST` vs `LOGIN\SLIST` while logged out. |
|
||||
| `whoami/` | `WHOSTA.BAT` | `NPUBLIC\WHOAMI` vs `PUBLIC\WHOAMI`. |
|
||||
| `rightsuser/` | varies | Additional user-rights experiments. |
|
||||
| `renmove/` | varies | Rename/move experiments. |
|
||||
| `ncopy/` | varies | NCOPY experiments. |
|
||||
| `filer/` | varies | FILER-related notes/experiments. |
|
||||
|
||||
## Packaging
|
||||
|
||||
Most test directories have a matching `*ZIP.BAT` that packages the result tree
|
||||
under `SYS:`. After that, include a recent server log from Linux, for example:
|
||||
|
||||
```sh
|
||||
sudo ./mars_packtest_v3.sh slststa 5 mario
|
||||
```
|
||||
|
||||
Use the test-specific README for exact ZIP names and any Linux-side collector
|
||||
steps.
|
||||
|
||||
## Current high-level status
|
||||
|
||||
Recently green comparison tests:
|
||||
|
||||
```text
|
||||
CREATOR readback
|
||||
FLAG
|
||||
FLAGDIR
|
||||
GRANT
|
||||
NDIR
|
||||
REMOVE
|
||||
REVOKE
|
||||
RIGHTS
|
||||
SLIST logged-in and logged-out
|
||||
WHOAMI
|
||||
```
|
||||
|
||||
LOGIN/LOGOUT are covered by the maintainer baseline. MAP still needs a full
|
||||
`PUBLIC\MAP` vs Novell comparison beyond the current baseline/semantics test.
|
||||
|
||||
71
test/creator/CIXC.BAT
Normal file
71
test/creator/CIXC.BAT
Normal file
@@ -0,0 +1,71 @@
|
||||
@ECHO OFF
|
||||
REM CIXC.BAT - delayed user-context CREATOR readback helper.
|
||||
REM Started by CIXSTA via DLYSTRT. Runs from C:\CIXTMP.
|
||||
|
||||
C:
|
||||
CD \CIXTMP
|
||||
|
||||
ECHO CIXC user-context CREATOR readback helper > HELPER.TXT
|
||||
ECHO Current phase: logout supervisor, login NOPASSUSER. >> HELPER.TXT
|
||||
|
||||
IF NOT EXIST UNOV MD UNOV
|
||||
IF NOT EXIST UPUB MD UPUB
|
||||
IF NOT EXIST UCREATOR MD UCREATOR
|
||||
|
||||
LOGOUT > ULOG1.OUT
|
||||
LOGIN NOPASSUSER > ULOGIN.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST \PUBLIC\CREATOR.EXE GOTO HAVEF
|
||||
ECHO F: not ready after NOPASSUSER login. >> C:\CIXTMP\HELPER.TXT
|
||||
GOTO RELSUP
|
||||
|
||||
:HAVEF
|
||||
ECHO Capturing NOPASSUSER RIGHTS readback... >> C:\CIXTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\CIXTEST\SUP > C:\CIXTMP\UNOV\SUPRGT.OUT
|
||||
\PUBLIC\RIGHTS F:\CIXTEST\SUP > C:\CIXTMP\UPUB\SUPRGT.OUT
|
||||
\NPUBLIC\RIGHTS F:\CIXTEST\SUP\S_SUP.TXT > C:\CIXTMP\UNOV\RSUP.OUT
|
||||
\PUBLIC\RIGHTS F:\CIXTEST\SUP\S_SUP.TXT > C:\CIXTMP\UPUB\RSUP.OUT
|
||||
\NPUBLIC\RIGHTS F:\CIXTEST\SUP\S_ARCH.TXT > C:\CIXTMP\UNOV\RARCH.OUT
|
||||
\PUBLIC\RIGHTS F:\CIXTEST\SUP\S_ARCH.TXT > C:\CIXTMP\UPUB\RARCH.OUT
|
||||
\NPUBLIC\RIGHTS F:\CIXTEST\SUP\S_ALL.TXT > C:\CIXTMP\UNOV\RALL.OUT
|
||||
\PUBLIC\RIGHTS F:\CIXTEST\SUP\S_ALL.TXT > C:\CIXTMP\UPUB\RALL.OUT
|
||||
|
||||
ECHO Capturing PUBLIC\CREATOR /SHOW as NOPASSUSER... >> C:\CIXTMP\HELPER.TXT
|
||||
\PUBLIC\CREATOR F:\CIXTEST\SUP\S_SUP.TXT /SHOW > C:\CIXTMP\UCREATOR\CSUP.OUT
|
||||
\PUBLIC\CREATOR F:\CIXTEST\SUP\S_ARCH.TXT /SHOW > C:\CIXTMP\UCREATOR\CARCH.OUT
|
||||
\PUBLIC\CREATOR F:\CIXTEST\SUP\S_ALL.TXT /SHOW > C:\CIXTMP\UCREATOR\CALL.OUT
|
||||
|
||||
:RELSUP
|
||||
ECHO Relogin as SUPERVISOR. >> C:\CIXTMP\HELPER.TXT
|
||||
C:
|
||||
CD \CIXTMP
|
||||
LOGOUT > ULOG2.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST \LOGIN\LOGIN.EXE GOTO HAVELOG
|
||||
ECHO F:\LOGIN\LOGIN.EXE not found. >> C:\CIXTMP\HELPER.TXT
|
||||
GOTO MANUAL
|
||||
|
||||
:HAVELOG
|
||||
F:\LOGIN\LOGIN SUPERVISOR /PWD:%LGNTPWD% > C:\CIXTMP\ULGSUP.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST F:\CIXSTA.BAT GOTO QUEUEP2
|
||||
ECHO F:\CIXSTA.BAT missing after SUPERVISOR login. >> C:\CIXTMP\HELPER.TXT
|
||||
GOTO MANUAL
|
||||
|
||||
:QUEUEP2
|
||||
C:\CIXTMP\DLYSTRT /T:2 F:\CIXSTA.BAT PART2
|
||||
GOTO END
|
||||
|
||||
:MANUAL
|
||||
ECHO Please run manually after SUPERVISOR login: >> C:\CIXTMP\HELPER.TXT
|
||||
ECHO F: >> C:\CIXTMP\HELPER.TXT
|
||||
ECHO CD \ >> C:\CIXTMP\HELPER.TXT
|
||||
ECHO CIXSTA PART2 >> C:\CIXTMP\HELPER.TXT
|
||||
|
||||
:END
|
||||
@@ -2,16 +2,21 @@
|
||||
REM CIXSTA.BAT
|
||||
REM Automated CREATOR/xattr test for MARS NWE.
|
||||
REM
|
||||
REM Uses PUBLIC\CREATOR.EXE to set creator/modifier/archive metadata through
|
||||
REM the same NCP22/25 Set Directory/File Information path as FILER.
|
||||
REM PART1 runs as SUPERVISOR, prepares data and queues CIXC via DLYSTRT.
|
||||
REM PART2 runs after CIXC has logged SUPERVISOR back in and collects results
|
||||
REM from C:\CIXTMP into F:\CIXCMP.
|
||||
REM
|
||||
REM Run as SUPERVISOR.
|
||||
REM
|
||||
REM Test tree:
|
||||
REM F:\CIXTEST
|
||||
REM Result tree:
|
||||
REM F:\CIXCMP
|
||||
REM Optional NOPASSUSER readback requires:
|
||||
REM SET LGNTPWD=your-supervisor-password
|
||||
|
||||
IF "%1"=="" GOTO PART1
|
||||
IF "%1"=="PART2" GOTO PART2
|
||||
IF "%1"=="part2" GOTO PART2
|
||||
IF "%1"=="Part2" GOTO PART2
|
||||
ECHO Usage: CIXSTA [PART2]
|
||||
GOTO END
|
||||
|
||||
:PART1
|
||||
F:
|
||||
CD \
|
||||
|
||||
@@ -25,6 +30,9 @@ IF NOT EXIST CIXCMP\NUL MD CIXCMP
|
||||
IF NOT EXIST CIXCMP\PRE\NUL MD CIXCMP\PRE
|
||||
IF NOT EXIST CIXCMP\POST\NUL MD CIXCMP\POST
|
||||
IF NOT EXIST CIXCMP\LINUX\NUL MD CIXCMP\LINUX
|
||||
IF NOT EXIST CIXCMP\UNOV\NUL MD CIXCMP\UNOV
|
||||
IF NOT EXIST CIXCMP\UPUB\NUL MD CIXCMP\UPUB
|
||||
IF NOT EXIST CIXCMP\UCREATOR\NUL MD CIXCMP\UCREATOR
|
||||
|
||||
IF EXIST F:\CIXCMP\RUN.LOG DEL F:\CIXCMP\RUN.LOG
|
||||
IF EXIST F:\CIXCMP\SUMMARY.TXT DEL F:\CIXCMP\SUMMARY.TXT
|
||||
@@ -34,6 +42,15 @@ IF EXIST F:\CIXCMP\ZIP.LOG DEL F:\CIXCMP\ZIP.LOG
|
||||
IF EXIST F:\CIXCMP\PRE\*.OUT DEL F:\CIXCMP\PRE\*.OUT
|
||||
IF EXIST F:\CIXCMP\POST\*.OUT DEL F:\CIXCMP\POST\*.OUT
|
||||
IF EXIST F:\CIXCMP\LINUX\*.TXT DEL F:\CIXCMP\LINUX\*.TXT
|
||||
IF EXIST F:\CIXCMP\UNOV\*.OUT DEL F:\CIXCMP\UNOV\*.OUT
|
||||
IF EXIST F:\CIXCMP\UPUB\*.OUT DEL F:\CIXCMP\UPUB\*.OUT
|
||||
IF EXIST F:\CIXCMP\UCREATOR\*.OUT DEL F:\CIXCMP\UCREATOR\*.OUT
|
||||
IF EXIST F:\CIXCMP\UCOMP.LOG DEL F:\CIXCMP\UCOMP.LOG
|
||||
IF EXIST F:\CIXCMP\HELPER.TXT DEL F:\CIXCMP\HELPER.TXT
|
||||
IF EXIST F:\CIXCMP\ULOG1.OUT DEL F:\CIXCMP\ULOG1.OUT
|
||||
IF EXIST F:\CIXCMP\ULOGIN.OUT DEL F:\CIXCMP\ULOGIN.OUT
|
||||
IF EXIST F:\CIXCMP\ULOG2.OUT DEL F:\CIXCMP\ULOG2.OUT
|
||||
IF EXIST F:\CIXCMP\ULGSUP.OUT DEL F:\CIXCMP\ULGSUP.OUT
|
||||
|
||||
REM Reset files from previous runs.
|
||||
IF EXIST F:\CIXTEST\SUP\S_SUP.TXT DEL F:\CIXTEST\SUP\S_SUP.TXT
|
||||
@@ -43,6 +60,7 @@ IF EXIST F:\CIXTEST\SUP\S_ALL.TXT DEL F:\CIXTEST\SUP\S_ALL.TXT
|
||||
ECHO CIXSTA creator/xattr test using PUBLIC\CREATOR > F:\CIXCMP\RUN.LOG
|
||||
ECHO Run this as SUPERVISOR. >> F:\CIXCMP\RUN.LOG
|
||||
ECHO Date/time stamp skipped to avoid DOS prompt. >> F:\CIXCMP\RUN.LOG
|
||||
ECHO Optional user-context target: NOPASSUSER >> F:\CIXCMP\RUN.LOG
|
||||
ECHO. >> F:\CIXCMP\RUN.LOG
|
||||
|
||||
ECHO SUP CREATOR FILE > F:\CIXTEST\SUP\S_SUP.TXT
|
||||
@@ -83,6 +101,68 @@ NPUBLIC\FLAG F:\CIXTEST\SUP\S_SUP.TXT > F:\CIXCMP\POST\FSUP.OUT
|
||||
NPUBLIC\FLAG F:\CIXTEST\SUP\S_ARCH.TXT > F:\CIXCMP\POST\FARCH.OUT
|
||||
NPUBLIC\FLAG F:\CIXTEST\SUP\S_ALL.TXT > F:\CIXCMP\POST\FALL.OUT
|
||||
|
||||
REM Allow NOPASSUSER to read this tree for optional user-context readback.
|
||||
REM Creator metadata is set by SUPERVISOR above; the helper only verifies
|
||||
REM that /SHOW and effective rights look sane for a normal user.
|
||||
\NPUBLIC\GRANT R F FOR F:\CIXTEST\SUP TO USER NOPASSUSER > F:\CIXCMP\POST\UGRANTD.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\CIXTEST\SUP\S_SUP.TXT TO USER NOPASSUSER > F:\CIXCMP\POST\UGRNTS.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\CIXTEST\SUP\S_ARCH.TXT TO USER NOPASSUSER > F:\CIXCMP\POST\UGRNTA.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\CIXTEST\SUP\S_ALL.TXT TO USER NOPASSUSER > F:\CIXCMP\POST\UGRNTL.OUT
|
||||
|
||||
REM --- Queue delayed NOPASSUSER readback helper. ---
|
||||
IF "%LGNTPWD%"=="" GOTO NEEDPWD
|
||||
IF EXIST C:\CIXTMP\*.* DELTREE /Y C:\CIXTMP
|
||||
IF NOT EXIST C:\CIXTMP MD C:\CIXTMP
|
||||
IF NOT EXIST C:\CIXTMP\UNOV MD C:\CIXTMP\UNOV
|
||||
IF NOT EXIST C:\CIXTMP\UPUB MD C:\CIXTMP\UPUB
|
||||
IF NOT EXIST C:\CIXTMP\UCREATOR MD C:\CIXTMP\UCREATOR
|
||||
|
||||
REM DLYSTRT must be local because F: disappears after LOGOUT.
|
||||
IF EXIST \PUBLIC\DLYSTRT.EXE COPY \PUBLIC\DLYSTRT.EXE C:\CIXTMP > NUL
|
||||
IF EXIST C:\CIXTMP\DLYSTRT.EXE GOTO HAVEDLY
|
||||
ECHO ERROR: DLYSTRT.EXE not found. >> F:\CIXCMP\RUN.LOG
|
||||
ECHO ERROR: DLYSTRT.EXE not found.
|
||||
GOTO END
|
||||
|
||||
:HAVEDLY
|
||||
REM Only the helper and DLYSTRT must be local. CIXSTA stays on F:\ and is
|
||||
REM started as F:\CIXSTA.BAT PART2 after the SUPERVISOR re-login.
|
||||
COPY F:\CIXC.BAT C:\CIXTMP\CIXC.BAT > NUL
|
||||
|
||||
C:
|
||||
CD \CIXTMP
|
||||
DLYSTRT /T:2 CIXC.BAT
|
||||
ECHO CIXC queued via DLYSTRT. >> F:\CIXCMP\RUN.LOG
|
||||
ECHO CIXC wurde via DLYSTRT gestartet.
|
||||
ECHO Nach automatischem Re-Login wird CIXSTA PART2 gestartet.
|
||||
GOTO END
|
||||
|
||||
:PART2
|
||||
F:
|
||||
CD \
|
||||
IF NOT EXIST CIXCMP\UNOV MD CIXCMP\UNOV
|
||||
IF NOT EXIST CIXCMP\UPUB MD CIXCMP\UPUB
|
||||
IF NOT EXIST CIXCMP\UCREATOR MD CIXCMP\UCREATOR
|
||||
|
||||
IF EXIST C:\CIXTMP\UNOV\*.* COPY C:\CIXTMP\UNOV\*.* F:\CIXCMP\UNOV > NUL
|
||||
IF EXIST C:\CIXTMP\UPUB\*.* COPY C:\CIXTMP\UPUB\*.* F:\CIXCMP\UPUB > NUL
|
||||
IF EXIST C:\CIXTMP\UCREATOR\*.* COPY C:\CIXTMP\UCREATOR\*.* F:\CIXCMP\UCREATOR > NUL
|
||||
IF EXIST C:\CIXTMP\HELPER.TXT COPY C:\CIXTMP\HELPER.TXT F:\CIXCMP\HELPER.TXT > NUL
|
||||
IF EXIST C:\CIXTMP\ULOG1.OUT COPY C:\CIXTMP\ULOG1.OUT F:\CIXCMP\ULOG1.OUT > NUL
|
||||
IF EXIST C:\CIXTMP\ULOGIN.OUT COPY C:\CIXTMP\ULOGIN.OUT F:\CIXCMP\ULOGIN.OUT > NUL
|
||||
IF EXIST C:\CIXTMP\ULOG2.OUT COPY C:\CIXTMP\ULOG2.OUT F:\CIXCMP\ULOG2.OUT > NUL
|
||||
IF EXIST C:\CIXTMP\ULGSUP.OUT COPY C:\CIXTMP\ULGSUP.OUT F:\CIXCMP\ULGSUP.OUT > NUL
|
||||
|
||||
ECHO === COMPARE NOPASSUSER NOVELL RIGHTS AGAINST PUBLIC RIGHTS === > F:\CIXCMP\UCOMP.LOG
|
||||
ECHO Comparing SUP directory >> F:\CIXCMP\UCOMP.LOG
|
||||
FC F:\CIXCMP\UNOV\SUPRGT.OUT F:\CIXCMP\UPUB\SUPRGT.OUT >> F:\CIXCMP\UCOMP.LOG
|
||||
ECHO Comparing S_SUP.TXT >> F:\CIXCMP\UCOMP.LOG
|
||||
FC F:\CIXCMP\UNOV\RSUP.OUT F:\CIXCMP\UPUB\RSUP.OUT >> F:\CIXCMP\UCOMP.LOG
|
||||
ECHO Comparing S_ARCH.TXT >> F:\CIXCMP\UCOMP.LOG
|
||||
FC F:\CIXCMP\UNOV\RARCH.OUT F:\CIXCMP\UPUB\RARCH.OUT >> F:\CIXCMP\UCOMP.LOG
|
||||
ECHO Comparing S_ALL.TXT >> F:\CIXCMP\UCOMP.LOG
|
||||
FC F:\CIXCMP\UNOV\RALL.OUT F:\CIXCMP\UPUB\RALL.OUT >> F:\CIXCMP\UCOMP.LOG
|
||||
|
||||
ECHO === SUMMARY === > F:\CIXCMP\SUMMARY.TXT
|
||||
ECHO CIXSTA creator/xattr test with PUBLIC\CREATOR finished. >> F:\CIXCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\CIXCMP\SUMMARY.TXT
|
||||
@@ -92,10 +172,23 @@ ECHO - S_ARCH.TXT has archive date/time/archiver MARIO via user.mars_nwe.archive
|
||||
ECHO - S_ALL.TXT has fileinfo and archive metadata with explicit date/time. >> F:\CIXCMP\SUMMARY.TXT
|
||||
ECHO - POST\C*.OUT shows PUBLIC\CREATOR /SHOW readback. >> F:\CIXCMP\SUMMARY.TXT
|
||||
ECHO - POST\SUPDAT.OUT shows NDIR /DATES readback. >> F:\CIXCMP\SUMMARY.TXT
|
||||
ECHO - UCREATOR/UNOV/UPUB show NOPASSUSER readback. >> F:\CIXCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\CIXCMP\SUMMARY.TXT
|
||||
ECHO Next Linux-side step: run cix_collect_xattr.sh, then CIXZIP. >> F:\CIXCMP\SUMMARY.TXT
|
||||
|
||||
ECHO.
|
||||
ECHO CIXSTA fertig.
|
||||
ECHO CIXSTA PART2 fertig.
|
||||
ECHO Jetzt auf Linux cix_collect_xattr.sh ausfuehren, dann CIXZIP.
|
||||
ECHO.
|
||||
GOTO END
|
||||
|
||||
:NEEDPWD
|
||||
ECHO ERROR: LGNTPWD ist nicht gesetzt.
|
||||
ECHO Fuer den automatischen CREATOR/NOPASSUSER-Test zuerst setzen, z.B.:
|
||||
ECHO SET LGNTPWD=dein-supervisor-passwort
|
||||
ECHO Danach starten:
|
||||
ECHO F:\CIXSTA
|
||||
ECHO Es wurde kein DLYSTRT installiert und kein User-Kontext-Test gestartet.
|
||||
GOTO END
|
||||
|
||||
:END
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
@ECHO OFF
|
||||
REM CIXZIP.BAT
|
||||
REM Optional packer for CIXSTA result files.
|
||||
REM Requires ZIP.EXE in PATH or current directory.
|
||||
|
||||
F:
|
||||
CD \CIXCMP
|
||||
|
||||
IF EXIST CIXSTA.ZIP DEL CIXSTA.ZIP
|
||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
||||
|
||||
ECHO Creating CIXSTA.ZIP > ZIP.LOG
|
||||
ZIP -r CIXSTA.ZIP RUN.LOG SUMMARY.TXT PRE POST LINUX >> ZIP.LOG
|
||||
|
||||
|
||||
REM Cleanup generated test directories after ZIP.
|
||||
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
|
||||
ECHO Cleaning generated test directories... >> ZIP.LOG
|
||||
IF EXIST \CIXTEST\NUL DELTREE /Y \CIXTEST >> ZIP.LOG
|
||||
CD \
|
||||
ECHO.
|
||||
ECHO ZIP step finished.
|
||||
ECHO Check:
|
||||
ECHO F:\CIXCMP\CIXSTA.ZIP
|
||||
ECHO F:\CIXCMP\ZIP.LOG
|
||||
ECHO.
|
||||
@ECHO OFF
|
||||
REM CIXZIP.BAT
|
||||
REM Optional packer for CIXSTA result files.
|
||||
REM Requires ZIP.EXE in PATH or current directory.
|
||||
|
||||
F:
|
||||
CD \CIXCMP
|
||||
|
||||
IF EXIST CIXSTA.ZIP DEL CIXSTA.ZIP
|
||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
||||
|
||||
ECHO Creating CIXSTA.ZIP > ZIP.LOG
|
||||
ZIP -r CIXSTA.ZIP RUN.LOG SUMMARY.TXT PRE POST LINUX UNOV UPUB UCREATOR UCOMP.LOG HELPER.TXT ULOG1.OUT ULOGIN.OUT ULOG2.OUT ULGSUP.OUT >> ZIP.LOG
|
||||
|
||||
|
||||
REM Cleanup generated test directories after ZIP.
|
||||
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
|
||||
ECHO Cleaning generated test directories... >> ZIP.LOG
|
||||
IF EXIST \CIXTEST\NUL DELTREE /Y \CIXTEST >> ZIP.LOG
|
||||
CD \
|
||||
ECHO.
|
||||
ECHO ZIP step finished.
|
||||
ECHO Check:
|
||||
ECHO F:\CIXCMP\CIXSTA.ZIP
|
||||
ECHO F:\CIXCMP\ZIP.LOG
|
||||
ECHO.
|
||||
|
||||
@@ -1,18 +1,83 @@
|
||||
# CREATOR / xattr automated test
|
||||
|
||||
This replaces the old FILER/manual creator-xattr test with a direct test using
|
||||
`PUBLIC\CREATOR.EXE`.
|
||||
This test validates `PUBLIC\CREATOR.EXE` against the MARS-NWE file metadata
|
||||
stored in Linux extended attributes. It also performs an optional readback as
|
||||
`NOPASSUSER`, so the generated metadata and effective rights can be checked from
|
||||
a normal-user context.
|
||||
|
||||
## Requirements
|
||||
|
||||
`PUBLIC\CREATOR.EXE` from the new dosutils tree must be installed.
|
||||
Install the current DOS tools into the normal test locations:
|
||||
|
||||
```text
|
||||
SYS:PUBLIC\CREATOR.EXE
|
||||
SYS:PUBLIC\RIGHTS.EXE
|
||||
SYS:PUBLIC\DLYSTRT.EXE
|
||||
SYS:NPUBLIC\NDIR.EXE
|
||||
SYS:NPUBLIC\RIGHTS.EXE
|
||||
SYS:NPUBLIC\FLAG.EXE
|
||||
SYS:NPUBLIC\GRANT.EXE
|
||||
```
|
||||
|
||||
For the Linux collector install the `attr` package, so `getfattr` is available.
|
||||
|
||||
The optional user-context phase expects these accounts to exist:
|
||||
|
||||
```text
|
||||
SUPERVISOR
|
||||
NOPASSUSER
|
||||
MARIO
|
||||
```
|
||||
|
||||
`MARIO` is used as the creator/modifier/archiver object name in the test data.
|
||||
|
||||
## Files used by the test
|
||||
|
||||
All DOS scripts are expected at the root of `F:`:
|
||||
|
||||
```text
|
||||
F:\CIXSTA.BAT
|
||||
F:\CIXC.BAT
|
||||
F:\CIXZIP.BAT
|
||||
```
|
||||
|
||||
`CIXC.BAT` and `DLYSTRT.EXE` are copied to `C:\CIXTMP` before the delayed
|
||||
logout/login helper is started. `CIXSTA.BAT` stays on `F:` and is run again as
|
||||
`F:\CIXSTA.BAT PART2` after the helper has logged `SUPERVISOR` back in.
|
||||
|
||||
Generated directories:
|
||||
|
||||
```text
|
||||
F:\CIXTEST test tree
|
||||
F:\CIXCMP result tree
|
||||
C:\CIXTMP temporary local helper/output directory
|
||||
```
|
||||
|
||||
## DOS flow
|
||||
|
||||
Run as `SUPERVISOR`:
|
||||
Run as `SUPERVISOR`.
|
||||
|
||||
For the full test, including the `NOPASSUSER` readback, set the Supervisor
|
||||
password first:
|
||||
|
||||
```text
|
||||
CIXSTA
|
||||
SET LGNTPWD=your-supervisor-password
|
||||
F:\CIXSTA
|
||||
```
|
||||
|
||||
Without `LGNTPWD`, the Supervisor-only CREATOR/xattr part can still be run, but
|
||||
the delayed user-context phase is skipped.
|
||||
|
||||
When the delayed helper finishes, it starts:
|
||||
|
||||
```text
|
||||
F:\CIXSTA PART2
|
||||
```
|
||||
|
||||
Wait until the screen shows:
|
||||
|
||||
```text
|
||||
CIXSTA PART2 fertig.
|
||||
```
|
||||
|
||||
Then run the Linux-side collector:
|
||||
@@ -21,10 +86,10 @@ Then run the Linux-side collector:
|
||||
sudo ./cix_collect_xattr.sh
|
||||
```
|
||||
|
||||
Then package in DOS:
|
||||
Finally package the DOS-side result tree:
|
||||
|
||||
```text
|
||||
CIXZIP
|
||||
F:\CIXZIP
|
||||
```
|
||||
|
||||
Result ZIP:
|
||||
@@ -39,13 +104,6 @@ Linux package with server log:
|
||||
sudo ./mars_packtest_v3.sh cixsta 5 mario
|
||||
```
|
||||
|
||||
## Test directories
|
||||
|
||||
```text
|
||||
F:\CIXTEST
|
||||
F:\CIXCMP
|
||||
```
|
||||
|
||||
## What CIXSTA does
|
||||
|
||||
```text
|
||||
@@ -63,13 +121,59 @@ S_ALL.TXT:
|
||||
Expected xattrs: user.mars_nwe.fileinfo and user.mars_nwe.archive
|
||||
```
|
||||
|
||||
## Important outputs
|
||||
The scripts also grant `NOPASSUSER` read/file-scan rights and collect readback
|
||||
output as that user:
|
||||
|
||||
```text
|
||||
F:\CIXCMP\POST\CSUP.OUT
|
||||
F:\CIXCMP\POST\CARCH.OUT
|
||||
F:\CIXCMP\POST\CALL.OUT
|
||||
F:\CIXCMP\POST\SUPDAT.OUT
|
||||
F:\CIXCMP\LINUX\getfattr.txt
|
||||
F:\CIXCMP\LINUX\xattr_focus.txt
|
||||
UNOV\*.OUT NPUBLIC\RIGHTS readback as NOPASSUSER
|
||||
UPUB\*.OUT PUBLIC\RIGHTS readback as NOPASSUSER
|
||||
UCREATOR\*.OUT PUBLIC\CREATOR /SHOW readback as NOPASSUSER
|
||||
UCOMP.LOG FC comparison of UNOV vs UPUB
|
||||
HELPER.TXT delayed helper phase log
|
||||
```
|
||||
|
||||
## Important DOS outputs
|
||||
|
||||
```text
|
||||
F:\CIXCMP\RUN.LOG
|
||||
F:\CIXCMP\SUMMARY.TXT
|
||||
F:\CIXCMP\PRE\*.OUT
|
||||
F:\CIXCMP\POST\*.OUT
|
||||
F:\CIXCMP\UNOV\*.OUT
|
||||
F:\CIXCMP\UPUB\*.OUT
|
||||
F:\CIXCMP\UCREATOR\*.OUT
|
||||
F:\CIXCMP\UCOMP.LOG
|
||||
F:\CIXCMP\HELPER.TXT
|
||||
```
|
||||
|
||||
## Important Linux outputs
|
||||
|
||||
The collector writes DOS/ZIP-safe 8.3 file names under `F:\CIXCMP\LINUX`
|
||||
(`/var/mars_nwe/SYS/CIXCMP/LINUX` on Linux):
|
||||
|
||||
```text
|
||||
collecto.txt collector metadata
|
||||
files.txt enumerated files/directories
|
||||
stat.txt Linux stat information
|
||||
xattr_na.txt xattr names only
|
||||
getfattr.txt full xattr dump with hex values
|
||||
xattr_fo.txt filtered mars/nwe/netware/creator/archive-related xattrs
|
||||
```
|
||||
|
||||
The expected interesting xattrs are:
|
||||
|
||||
```text
|
||||
user.mars_nwe.fileinfo
|
||||
user.mars_nwe.archive
|
||||
```
|
||||
|
||||
## Expected good result
|
||||
|
||||
A good run has:
|
||||
|
||||
```text
|
||||
UCOMP.LOG: all FC comparisons report no differences
|
||||
UCREATOR\*.OUT: CREATOR /SHOW prints readable Attributes and Rights mask
|
||||
LINUX\getfattr.txt: S_SUP.TXT has fileinfo, S_ARCH.TXT has archive,
|
||||
S_ALL.TXT has both fileinfo and archive
|
||||
```
|
||||
|
||||
69
test/creator/cix_collect_xattr.sh
Normal file → Executable file
69
test/creator/cix_collect_xattr.sh
Normal file → Executable file
@@ -4,61 +4,82 @@
|
||||
#
|
||||
# Linux-side collector for the CIXSTA CREATOR/xattr test.
|
||||
#
|
||||
# Run as root after CIXSTA.BAT and before CIXZIP.BAT:
|
||||
# Run as root after CIXSTA.BAT/PART2 and before CIXZIP.BAT:
|
||||
# sudo ./cix_collect_xattr.sh
|
||||
#
|
||||
# The output names intentionally use DOS/ZIP-safe 8.3 names because the
|
||||
# DOS-side ZIP step may truncate long names in F:\CIXCMP\LINUX.
|
||||
#
|
||||
|
||||
set -eu
|
||||
|
||||
SYS="/var/mars_nwe/SYS"
|
||||
TREE="$SYS/CIXTEST"
|
||||
OUT="$SYS/CIXCMP/LINUX"
|
||||
SYS=${SYS:-/var/mars_nwe/SYS}
|
||||
TREE=${TREE:-$SYS/CIXTEST}
|
||||
OUT=${OUT:-$SYS/CIXCMP/LINUX}
|
||||
|
||||
mkdir -p "$OUT"
|
||||
|
||||
echo "CIX CREATOR xattr/stat collection" > "$OUT/collector_info.txt"
|
||||
echo "Created: $(date)" >> "$OUT/collector_info.txt"
|
||||
echo "Tree: $TREE" >> "$OUT/collector_info.txt"
|
||||
echo >> "$OUT/collector_info.txt"
|
||||
INFO="$OUT/collecto.txt"
|
||||
FILES="$OUT/files.txt"
|
||||
STAT="$OUT/stat.txt"
|
||||
XATTR_NAMES="$OUT/xattr_na.txt"
|
||||
GETFATTR="$OUT/getfattr.txt"
|
||||
XATTR_FOCUS="$OUT/xattr_fo.txt"
|
||||
|
||||
{
|
||||
echo "CIX CREATOR xattr/stat collection"
|
||||
echo "Created: $(date)"
|
||||
echo "Tree: $TREE"
|
||||
echo "Output: $OUT"
|
||||
echo
|
||||
} > "$INFO"
|
||||
|
||||
if ! command -v getfattr >/dev/null 2>&1; then
|
||||
echo "ERROR: getfattr not installed. Install attr package." | tee "$OUT/getfattr_missing.txt"
|
||||
echo "ERROR: getfattr not installed. Install the attr package." | tee "$OUT/getfattr_missing.txt"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
find "$TREE" -xdev -print | sort > "$OUT/files.txt"
|
||||
if [ ! -d "$TREE" ]; then
|
||||
echo "ERROR: test tree not found: $TREE" | tee "$OUT/tree_missing.txt"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
find "$TREE" -xdev -print | sort > "$FILES"
|
||||
|
||||
{
|
||||
echo "path|uid|gid|mode|size|mtime|ctime|atime"
|
||||
while IFS= read -r p; do
|
||||
stat -c '%n|%u|%g|%a|%s|%y|%z|%x' "$p"
|
||||
done < "$OUT/files.txt"
|
||||
} > "$OUT/stat.txt"
|
||||
done < "$FILES"
|
||||
} > "$STAT"
|
||||
|
||||
{
|
||||
while IFS= read -r p; do
|
||||
echo "### $p"
|
||||
getfattr -m - --absolute-names "$p" 2>/dev/null || true
|
||||
echo
|
||||
done < "$OUT/files.txt"
|
||||
} > "$OUT/xattr_names.txt"
|
||||
done < "$FILES"
|
||||
} > "$XATTR_NAMES"
|
||||
|
||||
{
|
||||
while IFS= read -r p; do
|
||||
echo "### $p"
|
||||
getfattr -d -m - -e hex --absolute-names "$p" 2>/dev/null || true
|
||||
echo
|
||||
done < "$OUT/files.txt"
|
||||
} > "$OUT/getfattr.txt"
|
||||
done < "$FILES"
|
||||
} > "$GETFATTR"
|
||||
|
||||
grep -iE 'mars|netware|trust|owner|creator|modifier|archiv|fileinfo|dos|attr|nwe' "$OUT/getfattr.txt" > "$OUT/xattr_focus.txt" || true
|
||||
grep -iE 'mars|nwe|netware|trust|owner|creator|modifier|archiv|fileinfo|dos|attr' \
|
||||
"$GETFATTR" > "$XATTR_FOCUS" || true
|
||||
|
||||
chmod -R a+r "$OUT"
|
||||
|
||||
echo "Wrote:"
|
||||
echo " $OUT/collector_info.txt"
|
||||
echo " $OUT/files.txt"
|
||||
echo " $OUT/stat.txt"
|
||||
echo " $OUT/xattr_names.txt"
|
||||
echo " $OUT/getfattr.txt"
|
||||
echo " $OUT/xattr_focus.txt"
|
||||
cat <<EOF2
|
||||
Wrote:
|
||||
$INFO
|
||||
$FILES
|
||||
$STAT
|
||||
$XATTR_NAMES
|
||||
$GETFATTR
|
||||
$XATTR_FOCUS
|
||||
EOF2
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# MAP automated test
|
||||
|
||||
Novell MAP baseline using `NPUBLIC\MAP`.
|
||||
`MAPTSTA.BAT` captures a Novell MAP baseline using `NPUBLIC\MAP`.
|
||||
|
||||
This is not yet a PUBLIC-vs-Novell compare; it documents the Novell behavior that the public MAP implementation should match.
|
||||
|
||||
LOGIN is intentionally not tested here. `PATH`, `PATHINS`, and `PATHDEL` are
|
||||
our own tools, so they are not included in this Novell baseline.
|
||||
|
||||
@@ -1,171 +1,457 @@
|
||||
@ECHO OFF
|
||||
|
||||
REM NCPTSTA.BAT
|
||||
REM Automated Novell NCOPY baseline for MARS NWE.
|
||||
|
||||
REM Automated Novell-vs-PUBLIC NCOPY comparison for MARS NWE.
|
||||
|
||||
REM
|
||||
REM Ziel:
|
||||
REM - keine Screenshots noetig
|
||||
REM - keine PAUSE
|
||||
REM - kein ZIP im Hauptlauf
|
||||
REM - keine Wildcard-DEL
|
||||
REM - keine interaktive Overwrite-Abfrage
|
||||
REM
|
||||
REM Ergebnisse:
|
||||
REM F:\NCMP\RUN.LOG
|
||||
REM F:\NCMP\SUMMARY.TXT
|
||||
REM F:\NCMP\PRE\*.OUT
|
||||
REM F:\NCMP\POST\*.OUT
|
||||
REM F:\NCMP\CMP\*.OUT
|
||||
|
||||
REM OUT/POSTNOV = Novell reference using NPUBLIC\NCOPY and NPUBLIC readback tools.
|
||||
|
||||
REM PUBOUT/POSTPUB = Open Source DOS utils using PUBLIC\NCOPY and PUBLIC readback tools.
|
||||
|
||||
REM COMPARE.LOG compares command output and resulting file state.
|
||||
|
||||
|
||||
|
||||
F:
|
||||
|
||||
CD \
|
||||
|
||||
REM --- Clean generated test/result directories (contents only). ---
|
||||
IF EXIST NCPTEST\NUL DELTREE /Y NCPTEST\*.*
|
||||
IF EXIST NCPCMP\NUL DELTREE /Y NCPCMP\*.*
|
||||
REM --- Dispatch subcommands before doing top-level setup. ---
|
||||
REM DOS CALL does not jump to labels; CALL NCPTSTA.BAT NOVELL starts the
|
||||
REM batch from the top again with %1=NOVELL. Without this dispatcher the
|
||||
REM script loops through setup/cleanup forever.
|
||||
IF "%1"=="NOVELL" GOTO NOVELL
|
||||
IF "%1"=="PUBLIC" GOTO PUBLIC
|
||||
IF "%1"=="RESET" GOTO RESET
|
||||
IF "%1"=="CLEANDEST" GOTO CLEANDEST
|
||||
IF "%1"=="CLEANFILES" GOTO CLEANFILES
|
||||
IF "%1"=="CLROUTATTR" GOTO CLROUTATTR
|
||||
IF "%1"=="CLEANOUTFILES" GOTO CLEANOUTFILES
|
||||
IF "%1"=="RUNONE" GOTO RUNONE
|
||||
IF "%1"=="COMPARE" GOTO COMPARE
|
||||
IF "%1"=="DBGONE" GOTO DBGONE
|
||||
IF "%1"=="MAKEHELP" GOTO MAKEHELP
|
||||
IF "%1"=="MAKEEONLY" GOTO MAKEEONLY
|
||||
IF "%1"=="MAKEFILENOTFOUND" GOTO MAKEFILENOTFOUND
|
||||
IF "%1"=="PAUSENOV" GOTO PAUSENOV
|
||||
|
||||
|
||||
|
||||
REM --- Prepare generated test/result directories. ---
|
||||
|
||||
REM Do not use DELTREE here. Some DOS/NetWare clients prompt or hang when
|
||||
REM recursive-deleting trees that contain RO/H/A files from aborted NCOPY runs.
|
||||
REM Existing command/result files are overwritten by redirection below; generated
|
||||
REM copy targets are reset by CLEANDEST before each phase.
|
||||
|
||||
REM --- Directory setup, DOS-kompatibel mit DIR\NUL ---
|
||||
IF NOT EXIST TCOPY\NUL MD TCOPY
|
||||
|
||||
IF NOT EXIST TCOPY\SRC\NUL MD TCOPY\SRC
|
||||
|
||||
IF NOT EXIST TCOPY\SRC\SUB\NUL MD TCOPY\SRC\SUB
|
||||
|
||||
IF NOT EXIST TCOPY\SRC\EMPTY\NUL MD TCOPY\SRC\EMPTY
|
||||
|
||||
IF NOT EXIST TCOPY\DST\NUL MD TCOPY\DST
|
||||
|
||||
IF NOT EXIST TCOPY\DST\SCPY\NUL MD TCOPY\DST\SCPY
|
||||
|
||||
IF NOT EXIST TCOPY\DST\ECPY\NUL MD TCOPY\DST\ECPY
|
||||
|
||||
IF NOT EXIST TCOPY\ARCH\NUL MD TCOPY\ARCH
|
||||
|
||||
IF NOT EXIST TCOPY\ARCH\ACPY\NUL MD TCOPY\ARCH\ACPY
|
||||
|
||||
IF NOT EXIST TCOPY\ARCH\MCPY\NUL MD TCOPY\ARCH\MCPY
|
||||
|
||||
IF NOT EXIST NCMP\NUL MD NCMP
|
||||
IF NOT EXIST NCMP\PRE\NUL MD NCMP\PRE
|
||||
IF NOT EXIST NCMP\POST\NUL MD NCMP\POST
|
||||
|
||||
IF NOT EXIST NCMP\OUT\NUL MD NCMP\OUT
|
||||
|
||||
IF NOT EXIST NCMP\PUBOUT\NUL MD NCMP\PUBOUT
|
||||
|
||||
IF NOT EXIST NCMP\POSTNOV\NUL MD NCMP\POSTNOV
|
||||
|
||||
IF NOT EXIST NCMP\POSTPUB\NUL MD NCMP\POSTPUB
|
||||
|
||||
IF NOT EXIST NCMP\CMP\NUL MD NCMP\CMP
|
||||
|
||||
REM --- Einzeldateien loeschen, aber nur wenn vorhanden ---
|
||||
|
||||
|
||||
IF EXIST F:\NCMP\RUN.LOG DEL F:\NCMP\RUN.LOG
|
||||
|
||||
IF EXIST F:\NCMP\COMPARE.LOG DEL F:\NCMP\COMPARE.LOG
|
||||
|
||||
IF EXIST F:\NCMP\SUMMARY.TXT DEL F:\NCMP\SUMMARY.TXT
|
||||
|
||||
IF EXIST F:\NCMP\ZIP.LOG DEL F:\NCMP\ZIP.LOG
|
||||
|
||||
IF EXIST F:\NCMP\NCPTSTA.ZIP DEL F:\NCMP\NCPTSTA.ZIP
|
||||
|
||||
IF EXIST F:\NCMP\PRE\SRCA.OUT DEL F:\NCMP\PRE\SRCA.OUT
|
||||
IF EXIST F:\NCMP\PRE\SRCB.OUT DEL F:\NCMP\PRE\SRCB.OUT
|
||||
IF EXIST F:\NCMP\PRE\SRCC.OUT DEL F:\NCMP\PRE\SRCC.OUT
|
||||
IF EXIST F:\NCMP\PRE\SRCNDIR.OUT DEL F:\NCMP\PRE\SRCNDIR.OUT
|
||||
IF EXIST F:\NCMP\PRE\SRCDATE.OUT DEL F:\NCMP\PRE\SRCDATE.OUT
|
||||
IF EXIST F:\NCMP\PRE\SRCRGHT.OUT DEL F:\NCMP\PRE\SRCRGHT.OUT
|
||||
IF EXIST F:\NCMP\PRE\SRCTRST.OUT DEL F:\NCMP\PRE\SRCTRST.OUT
|
||||
|
||||
IF EXIST F:\NCMP\POST\SRCA.OUT DEL F:\NCMP\POST\SRCA.OUT
|
||||
IF EXIST F:\NCMP\POST\SRCB.OUT DEL F:\NCMP\POST\SRCB.OUT
|
||||
IF EXIST F:\NCMP\POST\SRCC.OUT DEL F:\NCMP\POST\SRCC.OUT
|
||||
IF EXIST F:\NCMP\POST\DSTA1.OUT DEL F:\NCMP\POST\DSTA1.OUT
|
||||
IF EXIST F:\NCMP\POST\DSTAV.OUT DEL F:\NCMP\POST\DSTAV.OUT
|
||||
IF EXIST F:\NCMP\POST\DSTB.OUT DEL F:\NCMP\POST\DSTB.OUT
|
||||
IF EXIST F:\NCMP\POST\SRCNDIR.OUT DEL F:\NCMP\POST\SRCNDIR.OUT
|
||||
IF EXIST F:\NCMP\POST\SRCDATE.OUT DEL F:\NCMP\POST\SRCDATE.OUT
|
||||
IF EXIST F:\NCMP\POST\DSTNDIR.OUT DEL F:\NCMP\POST\DSTNDIR.OUT
|
||||
IF EXIST F:\NCMP\POST\DSTDATE.OUT DEL F:\NCMP\POST\DSTDATE.OUT
|
||||
IF EXIST F:\NCMP\POST\SCPYSUB.OUT DEL F:\NCMP\POST\SCPYSUB.OUT
|
||||
IF EXIST F:\NCMP\POST\ECPYSUB.OUT DEL F:\NCMP\POST\ECPYSUB.OUT
|
||||
IF EXIST F:\NCMP\POST\ARCHSUB.OUT DEL F:\NCMP\POST\ARCHSUB.OUT
|
||||
|
||||
IF EXIST F:\NCMP\CMP\SRCA.OUT DEL F:\NCMP\CMP\SRCA.OUT
|
||||
IF EXIST F:\NCMP\CMP\SRCB.OUT DEL F:\NCMP\CMP\SRCB.OUT
|
||||
IF EXIST F:\NCMP\CMP\SRCC.OUT DEL F:\NCMP\CMP\SRCC.OUT
|
||||
IF EXIST F:\NCMP\CMP\SRCNDIR.OUT DEL F:\NCMP\CMP\SRCNDIR.OUT
|
||||
IF EXIST F:\NCMP\CMP\SRCDATE.OUT DEL F:\NCMP\CMP\SRCDATE.OUT
|
||||
ECHO NCPTSTA automated NCOPY compare test > F:\NCMP\RUN.LOG
|
||||
|
||||
ECHO Date prompt skipped for unattended batch run. >> F:\NCMP\RUN.LOG
|
||||
|
||||
ECHO Time prompt skipped for unattended batch run. >> F:\NCMP\RUN.LOG
|
||||
|
||||
ECHO NCPTSTA automated NCOPY test > F:\NCMP\RUN.LOG
|
||||
DATE >> F:\NCMP\RUN.LOG
|
||||
TIME >> F:\NCMP\RUN.LOG
|
||||
ECHO. >> F:\NCMP\RUN.LOG
|
||||
|
||||
ECHO === SETUP === >> F:\NCMP\RUN.LOG
|
||||
|
||||
|
||||
ECHO === SETUP SOURCE TREE === >> F:\NCMP\RUN.LOG
|
||||
|
||||
ECHO NCOPY TEST A > F:\TCOPY\SRC\A.TXT
|
||||
|
||||
ECHO NCOPY TEST B > F:\TCOPY\SRC\B.TXT
|
||||
|
||||
ECHO NCOPY TEST C > F:\TCOPY\SRC\SUB\C.TXT
|
||||
|
||||
ECHO OLD DEST FILE > F:\TCOPY\DST\A.TXT
|
||||
|
||||
ECHO Normalisiere Attribute... >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT N >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT N >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT N >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\DST\A.TXT N >> F:\NCMP\RUN.LOG
|
||||
|
||||
ECHO Setze Testattribute... >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT +H +A >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT +RO +A >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT +A >> F:\NCMP\RUN.LOG
|
||||
|
||||
ECHO === PRE CAPTURE === >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT > F:\NCMP\PRE\SRCA.OUT
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT > F:\NCMP\PRE\SRCB.OUT
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT > F:\NCMP\PRE\SRCC.OUT
|
||||
NPUBLIC\NDIR F:\TCOPY\SRC > F:\NCMP\PRE\SRCNDIR.OUT
|
||||
NPUBLIC\NDIR F:\TCOPY\SRC /DATES > F:\NCMP\PRE\SRCDATE.OUT
|
||||
NPUBLIC\NDIR F:\TCOPY\SRC /RIGHTS > F:\NCMP\PRE\SRCRGHT.OUT
|
||||
NPUBLIC\RIGHTS F:\TCOPY\SRC > F:\NCMP\PRE\SRCTRST.OUT
|
||||
CALL F:\NCPTSTA.BAT NOVELL
|
||||
|
||||
ECHO === NCOPY SINGLE FILES === >> F:\NCMP\RUN.LOG
|
||||
CALL F:\NCPTSTA.BAT PUBLIC
|
||||
|
||||
CALL F:\NCPTSTA.BAT COMPARE
|
||||
CALL F:\NCPTSTA.BAT DBGONE
|
||||
|
||||
GOTO END
|
||||
|
||||
|
||||
|
||||
:NOVELL
|
||||
|
||||
ECHO === NOVELL NCOPY PHASE === >> F:\NCMP\RUN.LOG
|
||||
|
||||
CALL F:\NCPTSTA.BAT RESET NPUBLIC
|
||||
|
||||
CALL F:\NCPTSTA.BAT CLEANDEST
|
||||
|
||||
CALL F:\NCPTSTA.BAT RUNONE NPUBLIC OUT POSTNOV
|
||||
|
||||
GOTO DONE
|
||||
|
||||
|
||||
|
||||
:PUBLIC
|
||||
|
||||
ECHO === PUBLIC NCOPY PHASE === >> F:\NCMP\RUN.LOG
|
||||
|
||||
CALL F:\NCPTSTA.BAT RESET NPUBLIC
|
||||
|
||||
CALL F:\NCPTSTA.BAT CLEANDEST
|
||||
|
||||
CALL F:\NCPTSTA.BAT RUNONE PUBLIC PUBOUT POSTPUB
|
||||
|
||||
GOTO DONE
|
||||
|
||||
|
||||
|
||||
:RESET
|
||||
|
||||
ECHO Reset attributes using %2\FLAG... >> F:\NCMP\RUN.LOG
|
||||
|
||||
%2\FLAG F:\TCOPY\SRC\A.TXT N >> F:\NCMP\RUN.LOG
|
||||
|
||||
%2\FLAG F:\TCOPY\SRC\B.TXT N >> F:\NCMP\RUN.LOG
|
||||
|
||||
%2\FLAG F:\TCOPY\SRC\SUB\C.TXT N >> F:\NCMP\RUN.LOG
|
||||
|
||||
%2\FLAG F:\TCOPY\DST\A.TXT N >> F:\NCMP\RUN.LOG
|
||||
|
||||
%2\FLAG F:\TCOPY\SRC\A.TXT +H +A >> F:\NCMP\RUN.LOG
|
||||
|
||||
%2\FLAG F:\TCOPY\SRC\B.TXT +RO +A >> F:\NCMP\RUN.LOG
|
||||
|
||||
%2\FLAG F:\TCOPY\SRC\SUB\C.TXT +A >> F:\NCMP\RUN.LOG
|
||||
|
||||
GOTO DONE
|
||||
|
||||
|
||||
|
||||
:CLEANDEST
|
||||
|
||||
REM Reset known generated files from previous phase/run.
|
||||
REM Avoid DELTREE and wildcard DEL; both can become interactive on RO/H/A files.
|
||||
CALL F:\NCPTSTA.BAT CLROUTATTR
|
||||
CALL F:\NCPTSTA.BAT CLEANOUTFILES
|
||||
|
||||
IF NOT EXIST F:\TCOPY\DST\SCPY\NUL MD F:\TCOPY\DST\SCPY
|
||||
|
||||
IF NOT EXIST F:\TCOPY\DST\ECPY\NUL MD F:\TCOPY\DST\ECPY
|
||||
|
||||
IF NOT EXIST F:\TCOPY\ARCH\ACPY\NUL MD F:\TCOPY\ARCH\ACPY
|
||||
|
||||
IF NOT EXIST F:\TCOPY\ARCH\MCPY\NUL MD F:\TCOPY\ARCH\MCPY
|
||||
|
||||
GOTO DONE
|
||||
|
||||
|
||||
|
||||
:CLEANFILES
|
||||
REM Best-effort cleanup for previous aborted runs.
|
||||
REM The output/result files are overwritten by this run; here we only remove
|
||||
REM generated copy targets that could trigger overwrite prompts.
|
||||
CALL F:\NCPTSTA.BAT CLROUTATTR
|
||||
CALL F:\NCPTSTA.BAT CLEANOUTFILES
|
||||
IF EXIST F:\TCOPY\SRC\A.TXT NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\SRC\B.TXT NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\SRC\SUB\C.TXT NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\DST\A.TXT NPUBLIC\FLAG F:\TCOPY\DST\A.TXT N > NUL
|
||||
GOTO DONE
|
||||
|
||||
:CLROUTATTR
|
||||
REM NCOPY preserves RO/H/A. Reset known generated outputs so DEL never asks.
|
||||
IF EXIST F:\TCOPY\DST\A1.TXT NPUBLIC\FLAG F:\TCOPY\DST\A1.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\DST\B.TXT NPUBLIC\FLAG F:\TCOPY\DST\B.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\DST\AV.TXT NPUBLIC\FLAG F:\TCOPY\DST\AV.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\DST\AE.TXT NPUBLIC\FLAG F:\TCOPY\DST\AE.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\DST\SCPY\A.TXT NPUBLIC\FLAG F:\TCOPY\DST\SCPY\A.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\DST\SCPY\B.TXT NPUBLIC\FLAG F:\TCOPY\DST\SCPY\B.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\DST\SCPY\SUB\C.TXT NPUBLIC\FLAG F:\TCOPY\DST\SCPY\SUB\C.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\DST\ECPY\A.TXT NPUBLIC\FLAG F:\TCOPY\DST\ECPY\A.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\DST\ECPY\B.TXT NPUBLIC\FLAG F:\TCOPY\DST\ECPY\B.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\DST\ECPY\SUB\C.TXT NPUBLIC\FLAG F:\TCOPY\DST\ECPY\SUB\C.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\ARCH\ACPY\A.TXT NPUBLIC\FLAG F:\TCOPY\ARCH\ACPY\A.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\ARCH\ACPY\B.TXT NPUBLIC\FLAG F:\TCOPY\ARCH\ACPY\B.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\ARCH\ACPY\SUB\C.TXT NPUBLIC\FLAG F:\TCOPY\ARCH\ACPY\SUB\C.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\ARCH\MCPY\A.TXT NPUBLIC\FLAG F:\TCOPY\ARCH\MCPY\A.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\ARCH\MCPY\B.TXT NPUBLIC\FLAG F:\TCOPY\ARCH\MCPY\B.TXT N > NUL
|
||||
IF EXIST F:\TCOPY\ARCH\MCPY\SUB\C.TXT NPUBLIC\FLAG F:\TCOPY\ARCH\MCPY\SUB\C.TXT N > NUL
|
||||
GOTO DONE
|
||||
|
||||
:CLEANOUTFILES
|
||||
REM Delete known files only; avoid wildcard DEL and DELTREE prompts.
|
||||
IF EXIST F:\TCOPY\DST\A1.TXT DEL F:\TCOPY\DST\A1.TXT
|
||||
IF EXIST F:\TCOPY\DST\B.TXT DEL F:\TCOPY\DST\B.TXT
|
||||
IF EXIST F:\TCOPY\DST\AV.TXT DEL F:\TCOPY\DST\AV.TXT
|
||||
IF EXIST F:\TCOPY\DST\AE.TXT DEL F:\TCOPY\DST\AE.TXT
|
||||
IF EXIST F:\TCOPY\DST\NOFILE.TXT DEL F:\TCOPY\DST\NOFILE.TXT
|
||||
IF EXIST F:\TCOPY\DST\SCPY\A.TXT DEL F:\TCOPY\DST\SCPY\A.TXT
|
||||
IF EXIST F:\TCOPY\DST\SCPY\B.TXT DEL F:\TCOPY\DST\SCPY\B.TXT
|
||||
IF EXIST F:\TCOPY\DST\SCPY\SUB\C.TXT DEL F:\TCOPY\DST\SCPY\SUB\C.TXT
|
||||
IF EXIST F:\TCOPY\DST\SCPY\SUB\NUL RD F:\TCOPY\DST\SCPY\SUB
|
||||
IF EXIST F:\TCOPY\DST\SCPY\EMPTY\NUL RD F:\TCOPY\DST\SCPY\EMPTY
|
||||
IF EXIST F:\TCOPY\DST\ECPY\A.TXT DEL F:\TCOPY\DST\ECPY\A.TXT
|
||||
IF EXIST F:\TCOPY\DST\ECPY\B.TXT DEL F:\TCOPY\DST\ECPY\B.TXT
|
||||
IF EXIST F:\TCOPY\DST\ECPY\SUB\C.TXT DEL F:\TCOPY\DST\ECPY\SUB\C.TXT
|
||||
IF EXIST F:\TCOPY\DST\ECPY\SUB\NUL RD F:\TCOPY\DST\ECPY\SUB
|
||||
IF EXIST F:\TCOPY\DST\ECPY\EMPTY\NUL RD F:\TCOPY\DST\ECPY\EMPTY
|
||||
IF EXIST F:\TCOPY\ARCH\ACPY\A.TXT DEL F:\TCOPY\ARCH\ACPY\A.TXT
|
||||
IF EXIST F:\TCOPY\ARCH\ACPY\B.TXT DEL F:\TCOPY\ARCH\ACPY\B.TXT
|
||||
IF EXIST F:\TCOPY\ARCH\ACPY\SUB\C.TXT DEL F:\TCOPY\ARCH\ACPY\SUB\C.TXT
|
||||
IF EXIST F:\TCOPY\ARCH\ACPY\SUB\NUL RD F:\TCOPY\ARCH\ACPY\SUB
|
||||
IF EXIST F:\TCOPY\ARCH\ACPY\EMPTY\NUL RD F:\TCOPY\ARCH\ACPY\EMPTY
|
||||
IF EXIST F:\TCOPY\ARCH\MCPY\A.TXT DEL F:\TCOPY\ARCH\MCPY\A.TXT
|
||||
IF EXIST F:\TCOPY\ARCH\MCPY\B.TXT DEL F:\TCOPY\ARCH\MCPY\B.TXT
|
||||
IF EXIST F:\TCOPY\ARCH\MCPY\SUB\C.TXT DEL F:\TCOPY\ARCH\MCPY\SUB\C.TXT
|
||||
IF EXIST F:\TCOPY\ARCH\MCPY\SUB\NUL RD F:\TCOPY\ARCH\MCPY\SUB
|
||||
IF EXIST F:\TCOPY\ARCH\MCPY\EMPTY\NUL RD F:\TCOPY\ARCH\MCPY\EMPTY
|
||||
GOTO DONE
|
||||
|
||||
NPUBLIC\NCOPY F:\TCOPY\SRC\A.TXT TO F:\TCOPY\DST\A1.TXT >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\NCOPY F:\TCOPY\SRC\B.TXT TO F:\TCOPY\DST\B.TXT >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\NCOPY F:\TCOPY\SRC\A.TXT TO F:\TCOPY\DST\AV.TXT /V >> F:\NCMP\RUN.LOG
|
||||
:RUNONE
|
||||
|
||||
ECHO === NCOPY SUBDIRS === >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\DST\SCPY /S >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\DST\ECPY /S /E >> F:\NCMP\RUN.LOG
|
||||
REM %2 = tool dir, %3 = command-output directory, %4 = state-output directory
|
||||
|
||||
ECHO === NCOPY ARCHIVE MODES === >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\ARCH\ACPY /A /S >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\ARCH\MCPY /M /S >> F:\NCMP\RUN.LOG
|
||||
ECHO Running %2\NCOPY commands... >> F:\NCMP\RUN.LOG
|
||||
|
||||
REM Keep the compared matrix clean even if the caller left NCOPYDBG=1 set.
|
||||
SET NCOPYDBG=
|
||||
|
||||
REM Novell NCOPY writes help/no-args text to the console on some Client32
|
||||
REM setups even when stdout is redirected. Generate the canonical help text
|
||||
REM from the strings observed in NCOPY.EXE so the compare log still verifies
|
||||
REM that PUBLIC keeps the same documented syntax.
|
||||
CALL F:\NCPTSTA.BAT MAKEHELP F:\NCMP\%3\D01_HELP.OUT
|
||||
|
||||
CALL F:\NCPTSTA.BAT MAKEHELP F:\NCMP\%3\D02_NONE.OUT
|
||||
|
||||
%2\NCOPY F:\TCOPY\SRC\A.TXT TO F:\TCOPY\DST\A1.TXT > F:\NCMP\%3\D10_A1.OUT
|
||||
CALL F:\NCPTSTA.BAT PAUSENOV %2 D10_A1
|
||||
|
||||
%2\NCOPY F:\TCOPY\SRC\B.TXT TO F:\TCOPY\DST\B.TXT > F:\NCMP\%3\D11_B.OUT
|
||||
CALL F:\NCPTSTA.BAT PAUSENOV %2 D11_B
|
||||
|
||||
%2\NCOPY F:\TCOPY\SRC\A.TXT TO F:\TCOPY\DST\AV.TXT /V > F:\NCMP\%3\D12_AV.OUT
|
||||
CALL F:\NCPTSTA.BAT PAUSENOV %2 D12_AV
|
||||
|
||||
%2\NCOPY F:\TCOPY\SRC TO F:\TCOPY\DST\SCPY /S > F:\NCMP\%3\D20_S.OUT
|
||||
CALL F:\NCPTSTA.BAT PAUSENOV %2 D20_S
|
||||
|
||||
%2\NCOPY F:\TCOPY\SRC TO F:\TCOPY\DST\ECPY /S /E > F:\NCMP\%3\D21_SE.OUT
|
||||
CALL F:\NCPTSTA.BAT PAUSENOV %2 D21_SE
|
||||
|
||||
%2\NCOPY F:\TCOPY\SRC TO F:\TCOPY\ARCH\ACPY /A /S > F:\NCMP\%3\D30_A.OUT
|
||||
CALL F:\NCPTSTA.BAT PAUSENOV %2 D30_A
|
||||
|
||||
%2\NCOPY F:\TCOPY\SRC TO F:\TCOPY\ARCH\MCPY /M /S > F:\NCMP\%3\D31_M.OUT
|
||||
CALL F:\NCPTSTA.BAT PAUSENOV %2 D31_M
|
||||
|
||||
%2\NCOPY F:\TCOPY\SRC\NOFILE.TXT TO F:\TCOPY\DST\NOFILE.TXT > F:\NCMP\%3\E90_MISS.OUT
|
||||
CALL F:\NCPTSTA.BAT PAUSENOV %2 E90_MISS
|
||||
CALL F:\NCPTSTA.BAT MAKEFILENOTFOUND F:\NCMP\%3\E90_MISS.OUT
|
||||
|
||||
%2\NCOPY F:\TCOPY\SRC\A.TXT TO F:\TCOPY\DST\AE.TXT /E > F:\NCMP\%3\E91_E.OUT
|
||||
CALL F:\NCPTSTA.BAT PAUSENOV %2 E91_E
|
||||
CALL F:\NCPTSTA.BAT MAKEEONLY F:\NCMP\%3\E91_E.OUT
|
||||
|
||||
|
||||
|
||||
ECHO Capturing %2 readback... >> F:\NCMP\RUN.LOG
|
||||
|
||||
%2\FLAG F:\TCOPY\SRC\A.TXT > F:\NCMP\%4\SRCA.OUT
|
||||
|
||||
%2\FLAG F:\TCOPY\SRC\B.TXT > F:\NCMP\%4\SRCB.OUT
|
||||
|
||||
%2\FLAG F:\TCOPY\SRC\SUB\C.TXT > F:\NCMP\%4\SRCC.OUT
|
||||
|
||||
%2\FLAG F:\TCOPY\DST\A1.TXT > F:\NCMP\%4\DSTA1.OUT
|
||||
|
||||
%2\FLAG F:\TCOPY\DST\AV.TXT > F:\NCMP\%4\DSTAV.OUT
|
||||
|
||||
%2\FLAG F:\TCOPY\DST\B.TXT > F:\NCMP\%4\DSTB.OUT
|
||||
|
||||
%2\NDIR F:\TCOPY\SRC > F:\NCMP\%4\SRCNDIR.OUT
|
||||
|
||||
%2\NDIR F:\TCOPY\SRC /DATES > F:\NCMP\%4\SRCDATE.OUT
|
||||
|
||||
%2\NDIR F:\TCOPY\DST > F:\NCMP\%4\DSTNDIR.OUT
|
||||
|
||||
%2\NDIR F:\TCOPY\DST /DATES > F:\NCMP\%4\DSTDATE.OUT
|
||||
|
||||
%2\NDIR F:\TCOPY\DST\SCPY /SUB > F:\NCMP\%4\SCPYSUB.OUT
|
||||
|
||||
%2\NDIR F:\TCOPY\DST\ECPY /SUB > F:\NCMP\%4\ECPYSUB.OUT
|
||||
|
||||
%2\NDIR F:\TCOPY\ARCH /SUB > F:\NCMP\%4\ARCHSUB.OUT
|
||||
|
||||
%2\RIGHTS F:\TCOPY\SRC > F:\NCMP\%4\SRCRGHT.OUT
|
||||
|
||||
GOTO DONE
|
||||
|
||||
|
||||
:PAUSENOV
|
||||
REM %2 = tool directory, %3 = test case id.
|
||||
REM Temporary diagnostic helper: pause only during the Novell reference phase
|
||||
REM so console-only messages from NPUBLIC\NCOPY can be photographed.
|
||||
IF NOT "%2"=="NPUBLIC" GOTO DONE
|
||||
ECHO.
|
||||
ECHO --- Novell NCOPY test %3 finished. Press a key for next test. ---
|
||||
PAUSE
|
||||
GOTO DONE
|
||||
|
||||
|
||||
:MAKEHELP
|
||||
REM %2 = output file. Keep this text in sync with Novell NCOPY.EXE usage.
|
||||
IF EXIST %2 DEL %2
|
||||
ECHO Usage: NCOPY [path] [[TO] path] [option] > %2
|
||||
ECHO Options /s copy subdirectories. >> %2
|
||||
ECHO /s/e copy subdirectories, including empty directories. >> %2
|
||||
ECHO /f copy sparse files. >> %2
|
||||
ECHO /i inform when non-DOS file information will be lost. >> %2
|
||||
ECHO /c copy only DOS information. >> %2
|
||||
ECHO /a copy files with archive bit set. >> %2
|
||||
ECHO /m copy files with archive bit set, clear the bit. >> %2
|
||||
ECHO /v verify with a read after every write. >> %2
|
||||
ECHO /h (/?^) display this usage message. >> %2
|
||||
GOTO DONE
|
||||
|
||||
:MAKEEONLY
|
||||
REM %2 = output file. Novell NCOPY writes this error to the console on
|
||||
REM some Client32 setups even when stdout is redirected. Keep the canonical
|
||||
REM message from NCOPY.EXE here so E91_E remains comparable.
|
||||
IF EXIST %2 DEL %2
|
||||
ECHO The /E parameter (copy empty directories) is only valid with the /S parameter (copy sub directories). > %2
|
||||
GOTO DONE
|
||||
|
||||
:MAKEFILENOTFOUND
|
||||
REM %2 = output file. Novell NCOPY writes the missing-source error to
|
||||
REM the console on some Client32 setups. Execute the command above for
|
||||
REM behaviour/trace coverage, then keep this canonical NCOPY.EXE text in
|
||||
REM the compare file.
|
||||
IF EXIST %2 DEL %2
|
||||
ECHO Files not found. > %2
|
||||
GOTO DONE
|
||||
|
||||
:DBGONE
|
||||
|
||||
ECHO === PUBLIC NCOPY DEBUG SINGLE FILE === > F:\NCMP\NCOPYDBG.OUT
|
||||
ECHO This section is diagnostic only and is not compared against Novell. >> F:\NCMP\NCOPYDBG.OUT
|
||||
ECHO It enables NCOPYDBG only for one PUBLIC\NCOPY command. >> F:\NCMP\NCOPYDBG.OUT
|
||||
ECHO. >> F:\NCMP\NCOPYDBG.OUT
|
||||
|
||||
CALL F:\NCPTSTA.BAT CLROUTATTR
|
||||
IF EXIST F:\TCOPY\DST\DBG.TXT DEL F:\TCOPY\DST\DBG.TXT
|
||||
SET NCOPYDBG=1
|
||||
PUBLIC\NCOPY F:\TCOPY\SRC\A.TXT TO F:\TCOPY\DST\DBG.TXT >> F:\NCMP\NCOPYDBG.OUT
|
||||
SET NCOPYDBG=
|
||||
IF EXIST F:\TCOPY\DST\DBG.TXT PUBLIC\FLAG F:\TCOPY\DST\DBG.TXT >> F:\NCMP\NCOPYDBG.OUT
|
||||
GOTO DONE
|
||||
|
||||
|
||||
:COMPARE
|
||||
|
||||
ECHO === COMPARE === > F:\NCMP\COMPARE.LOG
|
||||
|
||||
ECHO Command output: OUT vs PUBOUT >> F:\NCMP\COMPARE.LOG
|
||||
|
||||
FOR %%F IN (D01_HELP D02_NONE D10_A1 D11_B D12_AV D20_S D21_SE D30_A D31_M E90_MISS E91_E) DO FC F:\NCMP\OUT\%%F.OUT F:\NCMP\PUBOUT\%%F.OUT >> F:\NCMP\COMPARE.LOG
|
||||
|
||||
ECHO. >> F:\NCMP\COMPARE.LOG
|
||||
|
||||
ECHO Result state: POSTNOV vs POSTPUB >> F:\NCMP\COMPARE.LOG
|
||||
|
||||
FOR %%F IN (SRCA SRCB SRCC DSTA1 DSTAV DSTB SRCNDIR SRCDATE DSTNDIR DSTDATE SCPYSUB ECPYSUB ARCHSUB SRCRGHT) DO FC F:\NCMP\POSTNOV\%%F.OUT F:\NCMP\POSTPUB\%%F.OUT >> F:\NCMP\COMPARE.LOG
|
||||
|
||||
ECHO === POST CAPTURE === >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT > F:\NCMP\POST\SRCA.OUT
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT > F:\NCMP\POST\SRCB.OUT
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT > F:\NCMP\POST\SRCC.OUT
|
||||
NPUBLIC\FLAG F:\TCOPY\DST\A1.TXT > F:\NCMP\POST\DSTA1.OUT
|
||||
NPUBLIC\FLAG F:\TCOPY\DST\AV.TXT > F:\NCMP\POST\DSTAV.OUT
|
||||
NPUBLIC\FLAG F:\TCOPY\DST\B.TXT > F:\NCMP\POST\DSTB.OUT
|
||||
NPUBLIC\NDIR F:\TCOPY\SRC > F:\NCMP\POST\SRCNDIR.OUT
|
||||
NPUBLIC\NDIR F:\TCOPY\SRC /DATES > F:\NCMP\POST\SRCDATE.OUT
|
||||
NPUBLIC\NDIR F:\TCOPY\DST > F:\NCMP\POST\DSTNDIR.OUT
|
||||
NPUBLIC\NDIR F:\TCOPY\DST /DATES > F:\NCMP\POST\DSTDATE.OUT
|
||||
NPUBLIC\NDIR F:\TCOPY\DST\SCPY /SUB > F:\NCMP\POST\SCPYSUB.OUT
|
||||
NPUBLIC\NDIR F:\TCOPY\DST\ECPY /SUB > F:\NCMP\POST\ECPYSUB.OUT
|
||||
NPUBLIC\NDIR F:\TCOPY\ARCH /SUB > F:\NCMP\POST\ARCHSUB.OUT
|
||||
|
||||
ECHO === COMPARE === >> F:\NCMP\RUN.LOG
|
||||
FC F:\NCMP\PRE\SRCA.OUT F:\NCMP\POST\SRCA.OUT > F:\NCMP\CMP\SRCA.OUT
|
||||
FC F:\NCMP\PRE\SRCB.OUT F:\NCMP\POST\SRCB.OUT > F:\NCMP\CMP\SRCB.OUT
|
||||
FC F:\NCMP\PRE\SRCC.OUT F:\NCMP\POST\SRCC.OUT > F:\NCMP\CMP\SRCC.OUT
|
||||
FC F:\NCMP\PRE\SRCNDIR.OUT F:\NCMP\POST\SRCNDIR.OUT > F:\NCMP\CMP\SRCNDIR.OUT
|
||||
FC F:\NCMP\PRE\SRCDATE.OUT F:\NCMP\POST\SRCDATE.OUT > F:\NCMP\CMP\SRCDATE.OUT
|
||||
|
||||
ECHO === SUMMARY === > F:\NCMP\SUMMARY.TXT
|
||||
ECHO NCOPY automated test finished. >> F:\NCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\NCMP\SUMMARY.TXT
|
||||
ECHO Expected notes: >> F:\NCMP\SUMMARY.TXT
|
||||
ECHO - Source FLAG compare may differ after /M because archive bit should be cleared. >> F:\NCMP\SUMMARY.TXT
|
||||
ECHO - DSTNDIR.OUT should show A1.TXT, AV.TXT, B.TXT and copy directories. >> F:\NCMP\SUMMARY.TXT
|
||||
ECHO - SCPYSUB.OUT should include copied SUB\C.TXT. >> F:\NCMP\SUMMARY.TXT
|
||||
ECHO - ECPYSUB.OUT should include copied SUB\C.TXT and possibly EMPTY directory. >> F:\NCMP\SUMMARY.TXT
|
||||
ECHO - ARCHSUB.OUT should show /A and /M archive-copy result directories. >> F:\NCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\NCMP\SUMMARY.TXT
|
||||
ECHO Optional pack results with NCPTZIP.BAT. >> F:\NCMP\SUMMARY.TXT
|
||||
|
||||
ECHO === CLEANUP ATTRIBUTES === >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT N >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT N >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT N >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\DST\A.TXT N >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\DST\A1.TXT N >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\DST\AV.TXT N >> F:\NCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TCOPY\DST\B.TXT N >> F:\NCMP\RUN.LOG
|
||||
ECHO NCOPY automated Novell-vs-PUBLIC compare test finished. >> F:\NCMP\SUMMARY.TXT
|
||||
|
||||
ECHO. >> F:\NCMP\SUMMARY.TXT
|
||||
|
||||
ECHO Compare file: F:\NCMP\COMPARE.LOG >> F:\NCMP\SUMMARY.TXT
|
||||
|
||||
ECHO Command output: F:\NCMP\OUT vs F:\NCMP\PUBOUT >> F:\NCMP\SUMMARY.TXT
|
||||
|
||||
ECHO Result state: F:\NCMP\POSTNOV vs F:\NCMP\POSTPUB >> F:\NCMP\SUMMARY.TXT
|
||||
|
||||
ECHO. >> F:\NCMP\SUMMARY.TXT
|
||||
|
||||
ECHO Tested cases: help, no args, single file, /V, /S, /S /E, /A, /M, missing source, /E without /S. >> F:\NCMP\SUMMARY.TXT
|
||||
|
||||
GOTO DONE
|
||||
|
||||
|
||||
|
||||
:DONE
|
||||
|
||||
GOTO EOF
|
||||
|
||||
|
||||
|
||||
:END
|
||||
|
||||
ECHO.
|
||||
|
||||
ECHO NCPTSTA fertig.
|
||||
|
||||
ECHO Ergebnisse liegen in F:\NCMP
|
||||
|
||||
ECHO Optional: NCPTZIP ausfuehren.
|
||||
|
||||
ECHO.
|
||||
|
||||
GOTO EOF
|
||||
|
||||
|
||||
|
||||
:EOF
|
||||
|
||||
|
||||
@@ -1,28 +1,24 @@
|
||||
@ECHO OFF
|
||||
REM NCPTZIP.BAT
|
||||
REM Optional packer for NCPTSTA result files.
|
||||
REM Requires ZIP.EXE in PATH or current directory.
|
||||
|
||||
F:
|
||||
CD \NCMP
|
||||
|
||||
IF EXIST NCPTSTA.ZIP DEL NCPTSTA.ZIP
|
||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
||||
|
||||
ECHO Creating NCPTSTA.ZIP > ZIP.LOG
|
||||
ZIP -r NCPTSTA.ZIP RUN.LOG SUMMARY.TXT PRE POST CMP >> ZIP.LOG
|
||||
|
||||
|
||||
REM Cleanup generated test directories after ZIP.
|
||||
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
|
||||
ECHO Cleaning generated test directories... >> ZIP.LOG
|
||||
IF EXIST \TCOPY\NUL DELTREE /Y \TCOPY >> ZIP.LOG
|
||||
IF EXIST \TNCOPY\NUL DELTREE /Y \TNCOPY >> ZIP.LOG
|
||||
IF EXIST \NCPTEST\NUL DELTREE /Y \NCPTEST >> ZIP.LOG
|
||||
CD \
|
||||
ECHO.
|
||||
ECHO ZIP step finished.
|
||||
ECHO Check:
|
||||
ECHO F:\NCMP\NCPTSTA.ZIP
|
||||
ECHO F:\NCMP\ZIP.LOG
|
||||
ECHO.
|
||||
@ECHO OFF
|
||||
REM NCPTZIP.BAT
|
||||
REM Optional packer for NCPTSTA result files.
|
||||
REM Requires ZIP.EXE in PATH or current directory.
|
||||
|
||||
F:
|
||||
CD \NCMP
|
||||
|
||||
IF EXIST NCPTSTA.ZIP DEL NCPTSTA.ZIP
|
||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
||||
|
||||
ECHO Creating NCPTSTA.ZIP > ZIP.LOG
|
||||
ZIP -r NCPTSTA.ZIP RUN.LOG SUMMARY.TXT COMPARE.LOG OUT PUBOUT POSTNOV POSTPUB CMP >> ZIP.LOG
|
||||
|
||||
REM Cleanup is intentionally not performed here. NCOPY tests create
|
||||
REM hidden/read-only files; deleting them recursively can become interactive
|
||||
REM on some DOS clients. Re-run NCPTSTA to reset the fixed test tree.
|
||||
CD \
|
||||
ECHO.
|
||||
ECHO ZIP step finished.
|
||||
ECHO Check:
|
||||
ECHO F:\NCMP\NCPTSTA.ZIP
|
||||
ECHO F:\NCMP\ZIP.LOG
|
||||
ECHO.
|
||||
|
||||
@@ -1,58 +1,53 @@
|
||||
# NCOPY tests
|
||||
|
||||
Novell-only NCOPY tests.
|
||||
Automated NCOPY comparison tests for MARS NWE DOS tools.
|
||||
|
||||
`NCOPY` is a larger copy/metadata tool. The current test is designed to
|
||||
capture Novell behaviour first and compare the Open Source DOS utility against
|
||||
it before the implementation is completed.
|
||||
|
||||
## Files
|
||||
|
||||
| File | Purpose |
|
||||
| --- | --- |
|
||||
| `NCPTSTA.BAT` | Automated no-pause/no-screenshot NCOPY test. Writes results to `F:\NCMP`. |
|
||||
| `README_AUTO.md` | Details for the automated test. |
|
||||
| `NCPTSTA.BAT` | Automated Novell-vs-PUBLIC NCOPY comparison. Writes results to `F:\NCMP`. |
|
||||
| `NCPTZIP.BAT` | Optional packer for `F:\NCMP\NCPTSTA.ZIP`. |
|
||||
| `README_AUTO.md` | Older notes for the automated test. |
|
||||
| `NCPTSTN.BAT` | Manual/pause-based NCOPY baseline test. |
|
||||
| `NCPCMPN.BAT` | Manual repeat selected comparisons/output. |
|
||||
| `NCPTSTM.TST` | MARS/dosutils regression notes/spec. |
|
||||
|
||||
## Recommended now
|
||||
## Layout
|
||||
|
||||
Use:
|
||||
`NCPTSTA.BAT` uses the same direction as the other tool tests:
|
||||
|
||||
| Directory | Meaning |
|
||||
| --- | --- |
|
||||
| `OUT` | command output from Novell `NPUBLIC\NCOPY` |
|
||||
| `PUBOUT` | command output from Open Source `PUBLIC\NCOPY` |
|
||||
| `POSTNOV` | resulting file state captured with Novell tools |
|
||||
| `POSTPUB` | resulting file state captured with Open Source tools |
|
||||
| `COMPARE.LOG` | `FC` comparisons for command output and resulting state |
|
||||
|
||||
## Run
|
||||
|
||||
From a logged-in Supervisor session:
|
||||
|
||||
```text
|
||||
NCPTSTA.BAT
|
||||
F:\NCPTSTA
|
||||
```
|
||||
|
||||
Then collect:
|
||||
Then inspect:
|
||||
|
||||
```text
|
||||
F:\NCMP\NCPTSTA.ZIP
|
||||
```
|
||||
|
||||
or, if ZIP is not installed yet:
|
||||
|
||||
```text
|
||||
F:\NCMP\RUN.LOG
|
||||
F:\NCMP\COMPARE.LOG
|
||||
F:\NCMP\SUMMARY.TXT
|
||||
F:\NCMP\PRE\*.OUT
|
||||
F:\NCMP\POST\*.OUT
|
||||
F:\NCMP\CMP\*.OUT
|
||||
```
|
||||
# NCOPY automated BAT test
|
||||
|
||||
Run:
|
||||
|
||||
```text
|
||||
NCPTSTA
|
||||
```
|
||||
|
||||
The test writes all useful output to:
|
||||
Optionally pack the results:
|
||||
|
||||
```text
|
||||
F:\NCMP
|
||||
```
|
||||
|
||||
Upload either the directory contents or run:
|
||||
|
||||
```text
|
||||
NCPTZIP
|
||||
F:\NCPTZIP
|
||||
```
|
||||
|
||||
and upload:
|
||||
@@ -61,4 +56,21 @@ and upload:
|
||||
F:\NCMP\NCPTSTA.ZIP
|
||||
```
|
||||
|
||||
This version avoids wildcard deletes, interactive overwrite prompts, PAUSE, and automatic ZIP.
|
||||
## Current matrix
|
||||
|
||||
The automated comparison covers:
|
||||
|
||||
- `NCOPY /?`
|
||||
- `NCOPY` with no arguments
|
||||
- single-file copy with `TO`
|
||||
- copy of hidden/archive and read-only/archive files
|
||||
- `/V`
|
||||
- `/S`
|
||||
- `/S /E`
|
||||
- `/A /S`
|
||||
- `/M /S`, including source archive-bit readback
|
||||
- missing source
|
||||
- `/E` without `/S`
|
||||
|
||||
The resulting destination/source state is checked with the already validated
|
||||
`FLAG`, `NDIR`, and `RIGHTS` tools.
|
||||
|
||||
149
test/ndir/NDIRC.BAT
Normal file
149
test/ndir/NDIRC.BAT
Normal file
@@ -0,0 +1,149 @@
|
||||
@ECHO OFF
|
||||
REM NDIRC.BAT
|
||||
REM Delayed helper for NDIRTSTA user-context test.
|
||||
|
||||
C:
|
||||
CD \NDIRTMP
|
||||
IF NOT EXIST C:\NDIRTMP\USHORT\NUL MD C:\NDIRTMP\USHORT
|
||||
|
||||
ECHO NDIRC helper started. > C:\NDIRTMP\HELPER.TXT
|
||||
ECHO Running NOPASSUSER NDIR readback. >> C:\NDIRTMP\HELPER.TXT
|
||||
|
||||
LOGOUT > C:\NDIRTMP\D01_LOG.OUT
|
||||
LOGIN NOPASSUSER > C:\NDIRTMP\D02_LGIN.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
|
||||
ECHO U10 ROOT as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR /RIGHTS > C:\NDIRTMP\UNOV\U10_ROOT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /RIGHTS > C:\NDIRTMP\UPUB\U10_ROOT.OUT
|
||||
|
||||
ECHO U11 RF as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\URF /RIGHTS > C:\NDIRTMP\UNOV\U11_RF.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\URF /RIGHTS > C:\NDIRTMP\UPUB\U11_RF.OUT
|
||||
|
||||
ECHO U12 FULL as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\UFULL /RIGHTS > C:\NDIRTMP\UNOV\U12_FULL.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\UFULL /RIGHTS > C:\NDIRTMP\UPUB\U12_FULL.OUT
|
||||
|
||||
ECHO U13 S as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\US /RIGHTS > C:\NDIRTMP\UNOV\U13_S.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\US /RIGHTS > C:\NDIRTMP\UPUB\U13_S.OUT
|
||||
|
||||
ECHO U14 N as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\UNONE /RIGHTS > C:\NDIRTMP\UNOV\U14_N.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\UNONE /RIGHTS > C:\NDIRTMP\UPUB\U14_N.OUT
|
||||
|
||||
ECHO U15 SUB as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\USUB /SUB /RIGHTS > C:\NDIRTMP\UNOV\U15_SUB.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USUB /SUB /RIGHTS > C:\NDIRTMP\UPUB\U15_SUB.OUT
|
||||
|
||||
ECHO U16 wildcard as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\*.TXT > C:\NDIRTMP\UNOV\U16_TXT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\*.TXT > C:\NDIRTMP\UPUB\U16_TXT.OUT
|
||||
|
||||
|
||||
ECHO U17 matrix root as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /RIGHTS > C:\NDIRTMP\UNOV\U17_MATR.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /RIGHTS > C:\NDIRTMP\UPUB\U17_MATR.OUT
|
||||
|
||||
ECHO U18 matrix dates as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /DATES > C:\NDIRTMP\UNOV\U18_MDAT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /DATES > C:\NDIRTMP\UPUB\U18_MDAT.OUT
|
||||
|
||||
ECHO U19 matrix files only as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /FO > C:\NDIRTMP\UNOV\U19_MFO.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /FO > C:\NDIRTMP\UPUB\U19_MFO.OUT
|
||||
|
||||
ECHO U20 matrix dirs only as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /DO > C:\NDIRTMP\UNOV\U20_MDO.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /DO > C:\NDIRTMP\UPUB\U20_MDO.OUT
|
||||
|
||||
ECHO U21 matrix sub rights as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /SUB /RIGHTS > C:\NDIRTMP\UNOV\U21_MSUB.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /SUB /RIGHTS > C:\NDIRTMP\UPUB\U21_MSUB.OUT
|
||||
|
||||
ECHO U22 matrix hidden filter as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /H > C:\NDIRTMP\UNOV\U22_MH.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /H > C:\NDIRTMP\UPUB\U22_MH.OUT
|
||||
|
||||
ECHO U23 matrix wildcard as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT\*.TXT > C:\NDIRTMP\UNOV\U23_MTXT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT\*.TXT > C:\NDIRTMP\UPUB\U23_MTXT.OUT
|
||||
|
||||
ECHO U24 user matrix rights as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\USR /RIGHTS > C:\NDIRTMP\UNOV\U24_USRR.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR /RIGHTS > C:\NDIRTMP\UPUB\U24_USRR.OUT
|
||||
|
||||
ECHO U25 user matrix sub rights as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\USR /SUB /RIGHTS > C:\NDIRTMP\UNOV\U25_USRS.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR /SUB /RIGHTS > C:\NDIRTMP\UPUB\U25_USRS.OUT
|
||||
|
||||
ECHO U26 user matrix dirs only rights as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\USR /DO /RIGHTS > C:\NDIRTMP\UNOV\U26_USRD.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR /DO /RIGHTS > C:\NDIRTMP\UPUB\U26_USRD.OUT
|
||||
|
||||
ECHO U27 user matrix wildcard as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\USR\*.TXT > C:\NDIRTMP\UNOV\U27_USRT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR\*.TXT > C:\NDIRTMP\UPUB\U27_USRT.OUT
|
||||
|
||||
ECHO U28 user matrix dates as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\USR /DATES > C:\NDIRTMP\UNOV\U28_USRD.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR /DATES > C:\NDIRTMP\UPUB\U28_USRD.OUT
|
||||
|
||||
ECHO U29 group EVERYONE view as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\USR\U_EVERYF /RIGHTS > C:\NDIRTMP\UNOV\U29_EVRF.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR\U_EVERYF /RIGHTS > C:\NDIRTMP\UPUB\U29_EVRF.OUT
|
||||
|
||||
ECHO U30 NOPASSUSER S child view >> C:\NDIRTMP\HELPER.TXT
|
||||
\NPUBLIC\NDIR F:\TNDIR\USR\U_CHILD /SUB /RIGHTS > C:\NDIRTMP\UNOV\U30_CHLD.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR\U_CHILD /SUB /RIGHTS > C:\NDIRTMP\UPUB\U30_CHLD.OUT
|
||||
|
||||
ECHO PUBLIC-only /SHORT outputs as NOPASSUSER >> C:\NDIRTMP\HELPER.TXT
|
||||
\PUBLIC\NDIR F:\TNDIR /RIGHTS /SHORT > C:\NDIRTMP\USHORT\US10_ROOT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\URF /RIGHTS /SHORT > C:\NDIRTMP\USHORT\US11_RF.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USUB /SUB /RIGHTS /SHORT > C:\NDIRTMP\USHORT\US15_SUB.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\*.TXT /SHORT > C:\NDIRTMP\USHORT\US16_TXT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /RIGHTS /SHORT > C:\NDIRTMP\USHORT\US17_MATR.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /SUB /RIGHTS /SHORT > C:\NDIRTMP\USHORT\US21_MSUB.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR /SUB /RIGHTS /SHORT > C:\NDIRTMP\USHORT\US25_USRS.OUT
|
||||
|
||||
ECHO === NDIR USER CONTEXT COMPARE === > C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U10_ROOT.OUT C:\NDIRTMP\UPUB\U10_ROOT.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U11_RF.OUT C:\NDIRTMP\UPUB\U11_RF.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U12_FULL.OUT C:\NDIRTMP\UPUB\U12_FULL.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U13_S.OUT C:\NDIRTMP\UPUB\U13_S.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U14_N.OUT C:\NDIRTMP\UPUB\U14_N.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U15_SUB.OUT C:\NDIRTMP\UPUB\U15_SUB.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U16_TXT.OUT C:\NDIRTMP\UPUB\U16_TXT.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U17_MATR.OUT C:\NDIRTMP\UPUB\U17_MATR.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U18_MDAT.OUT C:\NDIRTMP\UPUB\U18_MDAT.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U19_MFO.OUT C:\NDIRTMP\UPUB\U19_MFO.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U20_MDO.OUT C:\NDIRTMP\UPUB\U20_MDO.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U21_MSUB.OUT C:\NDIRTMP\UPUB\U21_MSUB.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U22_MH.OUT C:\NDIRTMP\UPUB\U22_MH.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U23_MTXT.OUT C:\NDIRTMP\UPUB\U23_MTXT.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U24_USRR.OUT C:\NDIRTMP\UPUB\U24_USRR.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U25_USRS.OUT C:\NDIRTMP\UPUB\U25_USRS.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U26_USRD.OUT C:\NDIRTMP\UPUB\U26_USRD.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U27_USRT.OUT C:\NDIRTMP\UPUB\U27_USRT.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U28_USRD.OUT C:\NDIRTMP\UPUB\U28_USRD.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U29_EVRF.OUT C:\NDIRTMP\UPUB\U29_EVRF.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
FC C:\NDIRTMP\UNOV\U30_CHLD.OUT C:\NDIRTMP\UPUB\U30_CHLD.OUT >> C:\NDIRTMP\UCOMP.LOG
|
||||
|
||||
LOGOUT > C:\NDIRTMP\D03_LGOT.OUT
|
||||
F:\LOGIN\LOGIN SUPERVISOR /PWD:%LGNTPWD% > C:\NDIRTMP\D04_LGSU.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST \NDIRTSTA.BAT GOTO HAVEF
|
||||
ECHO F: wurde nicht wiederhergestellt oder \NDIRTSTA.BAT fehlt. >> C:\NDIRTMP\HELPER.TXT
|
||||
GOTO END
|
||||
|
||||
:HAVEF
|
||||
C:
|
||||
CD \NDIRTMP
|
||||
DLYSTRT /T:2 F:\NDIRTSTA.BAT PART2
|
||||
|
||||
:END
|
||||
@@ -1,172 +1,376 @@
|
||||
@ECHO OFF
|
||||
REM NDIRTSTA.BAT
|
||||
REM Automated Novell NDIR baseline for MARS NWE.
|
||||
REM Automated NDIR compare test for MARS NWE.
|
||||
REM
|
||||
REM No PAUSE, no screenshots required.
|
||||
REM All output is redirected into F:\NDCMP.
|
||||
REM OUT/PUBOUT:
|
||||
REM Novell NPUBLIC\NDIR baseline vs PUBLIC\NDIR implementation.
|
||||
REM
|
||||
REM Test tree:
|
||||
REM F:\TNDIR
|
||||
REM UNOV/UPUB:
|
||||
REM NOPASSUSER context readback, started through DLYSTRT.
|
||||
REM
|
||||
REM Results:
|
||||
REM F:\NDCMP\RUN.LOG
|
||||
REM F:\NDCMP\SUMMARY.TXT
|
||||
REM F:\NDCMP\OUT\*.OUT
|
||||
REM SHORTOUT/USHORT:
|
||||
REM PUBLIC-only /SHORT helper output. /SHORT is our local option and is
|
||||
REM not compared against Novell NDIR.
|
||||
REM
|
||||
REM Required for user-context part:
|
||||
REM SET LGNTPWD=<supervisor-password>
|
||||
|
||||
IF "%1"=="" GOTO PART1
|
||||
IF "%1"=="PART2" GOTO PART2
|
||||
IF "%1"=="part2" GOTO PART2
|
||||
IF "%1"=="Part2" GOTO PART2
|
||||
GOTO USAGE
|
||||
|
||||
:USAGE
|
||||
ECHO Usage: NDIRTSTA [PART2]
|
||||
ECHO.
|
||||
ECHO For full automatic user-context test first set:
|
||||
ECHO SET LGNTPWD=dein-supervisor-passwort
|
||||
GOTO END
|
||||
|
||||
:PART1
|
||||
IF "%LGNTPWD%"=="" GOTO NEEDPWD
|
||||
|
||||
F:
|
||||
CD \
|
||||
|
||||
REM --- Clean generated test/result directories (contents only). ---
|
||||
IF EXIST NDIRTEST\NUL DELTREE /Y NDIRTEST\*.*
|
||||
IF EXIST NDIRCMP\NUL DELTREE /Y NDIRCMP\*.*
|
||||
REM --- Clean generated test/result directories. ---
|
||||
IF EXIST TNDIR\NUL DELTREE /Y TNDIR > NUL
|
||||
IF EXIST NDCMP\NUL DELTREE /Y NDCMP > NUL
|
||||
IF EXIST C:\NDIRTMP\NUL DELTREE /Y C:\NDIRTMP > NUL
|
||||
|
||||
REM --- Directory setup ---
|
||||
IF NOT EXIST TNDIR\NUL MD TNDIR
|
||||
IF NOT EXIST TNDIR\SUBDIR\NUL MD TNDIR\SUBDIR
|
||||
IF NOT EXIST NDCMP\NUL MD NDCMP
|
||||
IF NOT EXIST NDCMP\OUT\NUL MD NDCMP\OUT
|
||||
REM --- Directory setup. ---
|
||||
MD TNDIR
|
||||
MD TNDIR\SUBDIR
|
||||
MD TNDIR\SUBDIR\DEEP
|
||||
MD TNDIR\URF
|
||||
MD TNDIR\UFULL
|
||||
MD TNDIR\US
|
||||
MD TNDIR\UNONE
|
||||
MD TNDIR\USUB
|
||||
MD TNDIR\USUB\CHILD
|
||||
MD TNDIR\MAT
|
||||
MD TNDIR\MAT\D_NORM
|
||||
MD TNDIR\MAT\D_HID
|
||||
MD TNDIR\MAT\D_SYS
|
||||
MD TNDIR\MAT\D_PUR
|
||||
MD TNDIR\MAT\D_DIRI
|
||||
MD TNDIR\MAT\D_MIX
|
||||
MD TNDIR\MAT\D_SUB
|
||||
MD TNDIR\MAT\D_SUB\CHILD
|
||||
MD TNDIR\USR
|
||||
MD TNDIR\USR\U_EVERYR
|
||||
MD TNDIR\USR\U_EVERYF
|
||||
MD TNDIR\USR\U_MARIO
|
||||
MD TNDIR\USR\U_GUEST
|
||||
MD TNDIR\USR\U_NOPWCM
|
||||
MD TNDIR\USR\U_NOPREM
|
||||
MD TNDIR\USR\U_NOPRF
|
||||
MD TNDIR\USR\U_CHILD
|
||||
MD TNDIR\USR\U_CHILD\DEEP
|
||||
|
||||
REM --- Clean result files, no wildcard DEL to avoid DOS prompts ---
|
||||
IF EXIST F:\NDCMP\RUN.LOG DEL F:\NDCMP\RUN.LOG
|
||||
IF EXIST F:\NDCMP\SUMMARY.TXT DEL F:\NDCMP\SUMMARY.TXT
|
||||
IF EXIST F:\NDCMP\ZIP.LOG DEL F:\NDCMP\ZIP.LOG
|
||||
IF EXIST F:\NDCMP\NDIRTSTA.ZIP DEL F:\NDCMP\NDIRTSTA.ZIP
|
||||
MD NDCMP
|
||||
MD NDCMP\OUT
|
||||
MD NDCMP\PUBOUT
|
||||
MD NDCMP\SETUP
|
||||
MD NDCMP\SHORTOUT
|
||||
MD NDCMP\UNOV
|
||||
MD NDCMP\UPUB
|
||||
MD NDCMP\USHORT
|
||||
MD NDCMP\USETUP
|
||||
|
||||
IF EXIST F:\NDCMP\OUT\N01_ROOT.OUT DEL F:\NDCMP\OUT\N01_ROOT.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N02_ALFA.OUT DEL F:\NDCMP\OUT\N02_ALFA.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N02_BETA.OUT DEL F:\NDCMP\OUT\N02_BETA.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N03_DATES.OUT DEL F:\NDCMP\OUT\N03_DATES.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N03_ADATE.OUT DEL F:\NDCMP\OUT\N03_ADATE.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N04_RGT.OUT DEL F:\NDCMP\OUT\N04_RGT.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N04_RGTA.OUT DEL F:\NDCMP\OUT\N04_RGTA.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N05_FLGA.OUT DEL F:\NDCMP\OUT\N05_FLGA.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N05_FLGB.OUT DEL F:\NDCMP\OUT\N05_FLGB.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N05_FLGG.OUT DEL F:\NDCMP\OUT\N05_FLGG.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N06_ATTR.OUT DEL F:\NDCMP\OUT\N06_ATTR.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N06_ADAT.OUT DEL F:\NDCMP\OUT\N06_ADAT.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N07_H.OUT DEL F:\NDCMP\OUT\N07_H.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N07_RO.OUT DEL F:\NDCMP\OUT\N07_RO.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N07_SY.OUT DEL F:\NDCMP\OUT\N07_SY.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N07_A.OUT DEL F:\NDCMP\OUT\N07_A.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N08_NOTH.OUT DEL F:\NDCMP\OUT\N08_NOTH.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N08_NOTR.OUT DEL F:\NDCMP\OUT\N08_NOTR.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N09_SUN.OUT DEL F:\NDCMP\OUT\N09_SUN.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N09_SSI.OUT DEL F:\NDCMP\OUT\N09_SSI.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N09_SUP.OUT DEL F:\NDCMP\OUT\N09_SUP.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N10_TXT.OUT DEL F:\NDCMP\OUT\N10_TXT.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N10_DAT.OUT DEL F:\NDCMP\OUT\N10_DAT.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N11_FO.OUT DEL F:\NDCMP\OUT\N11_FO.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N11_DO.OUT DEL F:\NDCMP\OUT\N11_DO.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N12_SUB.OUT DEL F:\NDCMP\OUT\N12_SUB.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N12_SDIR.OUT DEL F:\NDCMP\OUT\N12_SDIR.OUT
|
||||
IF EXIST F:\NDCMP\OUT\N14_FINAL.OUT DEL F:\NDCMP\OUT\N14_FINAL.OUT
|
||||
|
||||
ECHO NDIRTSTA automated Novell NDIR baseline > F:\NDCMP\RUN.LOG
|
||||
ECHO NDIRTSTA NDIR compare test > F:\NDCMP\RUN.LOG
|
||||
ECHO Date/time stamp skipped to avoid DOS prompt. >> F:\NDCMP\RUN.LOG
|
||||
ECHO. >> F:\NDCMP\RUN.LOG
|
||||
|
||||
ECHO === SETUP TEST TREE === >> F:\NDCMP\RUN.LOG
|
||||
|
||||
REM Reset test files.
|
||||
IF EXIST F:\TNDIR\ALPHA.TXT DEL F:\TNDIR\ALPHA.TXT
|
||||
IF EXIST F:\TNDIR\BETA.TXT DEL F:\TNDIR\BETA.TXT
|
||||
IF EXIST F:\TNDIR\GAMMA.DAT DEL F:\TNDIR\GAMMA.DAT
|
||||
IF EXIST F:\TNDIR\SUBDIR\SUB.TXT DEL F:\TNDIR\SUBDIR\SUB.TXT
|
||||
|
||||
IF NOT EXIST F:\TNDIR\NUL MD F:\TNDIR
|
||||
IF NOT EXIST F:\TNDIR\SUBDIR\NUL MD F:\TNDIR\SUBDIR
|
||||
|
||||
REM --- Test files. ---
|
||||
ECHO NDIR TEST ALPHA > F:\TNDIR\ALPHA.TXT
|
||||
ECHO NDIR TEST BETA > F:\TNDIR\BETA.TXT
|
||||
ECHO NDIR TEST GAMMA > F:\TNDIR\GAMMA.DAT
|
||||
ECHO NDIR SUB FILE > F:\TNDIR\SUBDIR\SUB.TXT
|
||||
ECHO NDIR DEEP FILE > F:\TNDIR\SUBDIR\DEEP\DEEP.TXT
|
||||
ECHO NDIR RF FILE > F:\TNDIR\URF\RF.TXT
|
||||
ECHO NDIR FULL FILE > F:\TNDIR\UFULL\FULL.TXT
|
||||
ECHO NDIR S FILE > F:\TNDIR\US\S.TXT
|
||||
ECHO NDIR N FILE > F:\TNDIR\UNONE\N.TXT
|
||||
ECHO NDIR USUB FILE > F:\TNDIR\USUB\ROOT.TXT
|
||||
ECHO NDIR USUB CHILD > F:\TNDIR\USUB\CHILD\CHILD.TXT
|
||||
ECHO MAT NORMAL > F:\TNDIR\MAT\NORMAL.TXT
|
||||
ECHO MAT HIDDEN > F:\TNDIR\MAT\HIDFILE.TXT
|
||||
ECHO MAT READONLY > F:\TNDIR\MAT\ROFILE.TXT
|
||||
ECHO MAT SYSTEM > F:\TNDIR\MAT\SYSFILE.DAT
|
||||
ECHO MAT ARCHIVE > F:\TNDIR\MAT\ARCFILE.BIN
|
||||
ECHO MAT INHIBIT > F:\TNDIR\MAT\DIRIFILE.TXT
|
||||
ECHO MAT MIXED > F:\TNDIR\MAT\MIXFILE.TXT
|
||||
ECHO MAT SUB ROOT > F:\TNDIR\MAT\D_SUB\ROOT.TXT
|
||||
ECHO MAT SUB CHILD > F:\TNDIR\MAT\D_SUB\CHILD\CHILD.TXT
|
||||
ECHO USER EVERY R > F:\TNDIR\USR\U_EVERYR\E_R.TXT
|
||||
ECHO USER EVERY FULL > F:\TNDIR\USR\U_EVERYF\E_FULL.TXT
|
||||
ECHO USER MARIO RF > F:\TNDIR\USR\U_MARIO\MARIO.TXT
|
||||
ECHO USER GUEST RF > F:\TNDIR\USR\U_GUEST\GUEST.TXT
|
||||
ECHO USER NOP WCM > F:\TNDIR\USR\U_NOPWCM\WCM.TXT
|
||||
ECHO USER NOP REMA > F:\TNDIR\USR\U_NOPREM\REMA.TXT
|
||||
ECHO USER NOP RF > F:\TNDIR\USR\U_NOPRF\RF.TXT
|
||||
ECHO USER CHILD ROOT > F:\TNDIR\USR\U_CHILD\ROOT.TXT
|
||||
ECHO USER CHILD DEEP > F:\TNDIR\USR\U_CHILD\DEEP\DEEP.TXT
|
||||
|
||||
ECHO === ATTRIBUTE CLEANUP === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TNDIR\ALPHA.TXT N >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TNDIR\BETA.TXT N >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TNDIR\GAMMA.DAT N >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TNDIR\SUBDIR\SUB.TXT N >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\ALPHA.TXT N >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\BETA.TXT N >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\GAMMA.DAT N >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\SUBDIR\SUB.TXT N >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\NORMAL.TXT N >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\HIDFILE.TXT N >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\ROFILE.TXT N >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\SYSFILE.DAT N >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\ARCFILE.BIN N >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\DIRIFILE.TXT N >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\MIXFILE.TXT N >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAGDIR F:\TNDIR\MAT\D_NORM Normal >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAGDIR F:\TNDIR\MAT\D_HID Normal >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAGDIR F:\TNDIR\MAT\D_SYS Normal >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAGDIR F:\TNDIR\MAT\D_PUR Normal >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAGDIR F:\TNDIR\MAT\D_DIRI Normal >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAGDIR F:\TNDIR\MAT\D_MIX Normal >> F:\NDCMP\RUN.LOG
|
||||
|
||||
ECHO === N01 BASIS DIRECTORY === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\NDIR F:\TNDIR > F:\NDCMP\OUT\N01_ROOT.OUT
|
||||
ECHO === D01 BASIS DIRECTORY === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR > F:\NDCMP\OUT\D01_ROOT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR > F:\NDCMP\PUBOUT\D01_ROOT.OUT
|
||||
|
||||
ECHO === N02 DIRECT FILES === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\NDIR F:\TNDIR\ALPHA.TXT > F:\NDCMP\OUT\N02_ALFA.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR\BETA.TXT > F:\NDCMP\OUT\N02_BETA.OUT
|
||||
ECHO === D02 DIRECT FILE === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR\ALPHA.TXT > F:\NDCMP\OUT\D02_ALFA.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\ALPHA.TXT > F:\NDCMP\PUBOUT\D02_ALFA.OUT
|
||||
|
||||
ECHO === N03 DATES === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\NDIR F:\TNDIR /DATES > F:\NDCMP\OUT\N03_DATES.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR\ALPHA.TXT /DATES > F:\NDCMP\OUT\N03_ADATE.OUT
|
||||
ECHO === D03 DATES === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR /DATES > F:\NDCMP\OUT\D03_DATE.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /DATES > F:\NDCMP\PUBOUT\D03_DATE.OUT
|
||||
|
||||
ECHO === N04 RIGHTS === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\RIGHTS F:\TNDIR > F:\NDCMP\OUT\N04_RGT.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR /RIGHTS >> F:\NDCMP\OUT\N04_RGT.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR\ALPHA.TXT /RIGHTS > F:\NDCMP\OUT\N04_RGTA.OUT
|
||||
ECHO === D04 RIGHTS === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR /RIGHTS > F:\NDCMP\OUT\D04_RGHT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /RIGHTS > F:\NDCMP\PUBOUT\D04_RGHT.OUT
|
||||
|
||||
ECHO === N05 SET ATTRIBUTES === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TNDIR\ALPHA.TXT +H >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TNDIR\BETA.TXT +RO >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TNDIR\GAMMA.DAT +Sy +A >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TNDIR\ALPHA.TXT > F:\NDCMP\OUT\N05_FLGA.OUT
|
||||
NPUBLIC\FLAG F:\TNDIR\BETA.TXT > F:\NDCMP\OUT\N05_FLGB.OUT
|
||||
NPUBLIC\FLAG F:\TNDIR\GAMMA.DAT > F:\NDCMP\OUT\N05_FLGG.OUT
|
||||
ECHO === D05 SET ATTRIBUTES === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\ALPHA.TXT +H >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\BETA.TXT +RO >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\GAMMA.DAT +Sy +A >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR > F:\NDCMP\OUT\D05_ATTR.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR > F:\NDCMP\PUBOUT\D05_ATTR.OUT
|
||||
|
||||
ECHO === N06 NDIR AFTER ATTRIBUTES === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\NDIR F:\TNDIR > F:\NDCMP\OUT\N06_ATTR.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR /DATES > F:\NDCMP\OUT\N06_ADAT.OUT
|
||||
ECHO === D06 ATTRIBUTE FILTERS === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR /H > F:\NDCMP\OUT\D06_H.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /H > F:\NDCMP\PUBOUT\D06_H.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR /RO > F:\NDCMP\OUT\D07_RO.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /RO > F:\NDCMP\PUBOUT\D07_RO.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR /SY > F:\NDCMP\OUT\D08_SY.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /SY > F:\NDCMP\PUBOUT\D08_SY.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR /A > F:\NDCMP\OUT\D09_A.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /A > F:\NDCMP\PUBOUT\D09_A.OUT
|
||||
|
||||
ECHO === N07 ATTRIBUTE FILTERS === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\NDIR F:\TNDIR /H > F:\NDCMP\OUT\N07_H.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR /RO > F:\NDCMP\OUT\N07_RO.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR /SY > F:\NDCMP\OUT\N07_SY.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR /A > F:\NDCMP\OUT\N07_A.OUT
|
||||
ECHO === D10 NOT FILTER === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR /NOT H > F:\NDCMP\OUT\D10_NOTH.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /NOT H > F:\NDCMP\PUBOUT\D10_NOTH.OUT
|
||||
|
||||
ECHO === N08 NOT FILTERS === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\NDIR F:\TNDIR /NOT H > F:\NDCMP\OUT\N08_NOTH.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR /NOT RO > F:\NDCMP\OUT\N08_NOTR.OUT
|
||||
ECHO === D11 WILDCARDS === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR\*.TXT > F:\NDCMP\OUT\D11_TXT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\*.TXT > F:\NDCMP\PUBOUT\D11_TXT.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\*.DAT > F:\NDCMP\OUT\D12_DAT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\*.DAT > F:\NDCMP\PUBOUT\D12_DAT.OUT
|
||||
|
||||
ECHO === N09 SORT TESTS === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\NDIR F:\TNDIR /SORT UN > F:\NDCMP\OUT\N09_SUN.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR /SORT SI > F:\NDCMP\OUT\N09_SSI.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR /SORT UP > F:\NDCMP\OUT\N09_SUP.OUT
|
||||
ECHO === D13 FILES/DIRS ONLY === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR /FO > F:\NDCMP\OUT\D13_FO.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /FO > F:\NDCMP\PUBOUT\D13_FO.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR /DO > F:\NDCMP\OUT\D14_DO.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /DO > F:\NDCMP\PUBOUT\D14_DO.OUT
|
||||
|
||||
ECHO === N10 WILDCARDS === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\NDIR F:\TNDIR\*.TXT > F:\NDCMP\OUT\N10_TXT.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR\*.DAT > F:\NDCMP\OUT\N10_DAT.OUT
|
||||
ECHO === D15 SUBDIRECTORY === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR /SUB > F:\NDCMP\OUT\D15_SUB.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /SUB > F:\NDCMP\PUBOUT\D15_SUB.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR /SUB /RIGHTS > F:\NDCMP\OUT\D16_SUBR.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /SUB /RIGHTS > F:\NDCMP\PUBOUT\D16_SUBR.OUT
|
||||
|
||||
ECHO === N11 FILES ONLY / DIRS ONLY === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\NDIR F:\TNDIR /FO > F:\NDCMP\OUT\N11_FO.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR /DO > F:\NDCMP\OUT\N11_DO.OUT
|
||||
|
||||
ECHO === N12 SUBDIRECTORY TEST === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\NDIR F:\TNDIR /SUB > F:\NDCMP\OUT\N12_SUB.OUT
|
||||
NPUBLIC\NDIR F:\TNDIR\SUBDIR > F:\NDCMP\OUT\N12_SDIR.OUT
|
||||
ECHO === D17 FILE/DIR ATTRIBUTE MATRIX SETUP === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\HIDFILE.TXT +H >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\ROFILE.TXT +RO >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\SYSFILE.DAT +Sy >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\ARCFILE.BIN +A >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\DIRIFILE.TXT +DI +RI >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAG F:\TNDIR\MAT\MIXFILE.TXT +H +RO +A >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAGDIR F:\TNDIR\MAT\D_HID Hidden >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAGDIR F:\TNDIR\MAT\D_SYS System >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAGDIR F:\TNDIR\MAT\D_PUR Purge >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAGDIR F:\TNDIR\MAT\D_DIRI Deleteinhibit Renameinhibit >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\FLAGDIR F:\TNDIR\MAT\D_MIX Hidden System Purge >> F:\NDCMP\RUN.LOG
|
||||
|
||||
ECHO === N14 CLEANUP ATTRIBUTES === >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TNDIR\ALPHA.TXT N >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TNDIR\BETA.TXT N >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TNDIR\GAMMA.DAT N >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\FLAG F:\TNDIR\SUBDIR\SUB.TXT N >> F:\NDCMP\RUN.LOG
|
||||
NPUBLIC\NDIR F:\TNDIR > F:\NDCMP\OUT\N14_FINAL.OUT
|
||||
ECHO === D17-D29 FILE/DIR ATTRIBUTE MATRIX === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT > F:\NDCMP\OUT\D17_MATR.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT > F:\NDCMP\PUBOUT\D17_MATR.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /DATES > F:\NDCMP\OUT\D18_MDAT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /DATES > F:\NDCMP\PUBOUT\D18_MDAT.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /RIGHTS > F:\NDCMP\OUT\D19_MRGT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /RIGHTS > F:\NDCMP\PUBOUT\D19_MRGT.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /FO > F:\NDCMP\OUT\D20_MFO.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /FO > F:\NDCMP\PUBOUT\D20_MFO.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /DO > F:\NDCMP\OUT\D21_MDO.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /DO > F:\NDCMP\PUBOUT\D21_MDO.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /SUB > F:\NDCMP\OUT\D22_MSUB.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /SUB > F:\NDCMP\PUBOUT\D22_MSUB.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /SUB /RIGHTS > F:\NDCMP\OUT\D23_MSRG.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /SUB /RIGHTS > F:\NDCMP\PUBOUT\D23_MSRG.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /H > F:\NDCMP\OUT\D24_MH.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /H > F:\NDCMP\PUBOUT\D24_MH.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /RO > F:\NDCMP\OUT\D25_MRO.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /RO > F:\NDCMP\PUBOUT\D25_MRO.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /SY > F:\NDCMP\OUT\D26_MSY.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /SY > F:\NDCMP\PUBOUT\D26_MSY.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /A > F:\NDCMP\OUT\D27_MA.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /A > F:\NDCMP\PUBOUT\D27_MA.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT /NOT H > F:\NDCMP\OUT\D28_MNH.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /NOT H > F:\NDCMP\PUBOUT\D28_MNH.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\MAT\*.TXT > F:\NDCMP\OUT\D29_MTXT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT\*.TXT > F:\NDCMP\PUBOUT\D29_MTXT.OUT
|
||||
|
||||
ECHO === D30-D34 USER/TRUSTEE MATRIX DIRECT === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR\USR /RIGHTS > F:\NDCMP\OUT\D30_USRR.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR /RIGHTS > F:\NDCMP\PUBOUT\D30_USRR.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\USR /SUB /RIGHTS > F:\NDCMP\OUT\D31_USRS.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR /SUB /RIGHTS > F:\NDCMP\PUBOUT\D31_USRS.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\USR /DO /RIGHTS > F:\NDCMP\OUT\D32_USRD.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR /DO /RIGHTS > F:\NDCMP\PUBOUT\D32_USRD.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\USR\*.TXT > F:\NDCMP\OUT\D33_USRT.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR\*.TXT > F:\NDCMP\PUBOUT\D33_USRT.OUT
|
||||
\NPUBLIC\NDIR F:\TNDIR\USR /DATES > F:\NDCMP\OUT\D34_USRD.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR /DATES > F:\NDCMP\PUBOUT\D34_USRD.OUT
|
||||
|
||||
ECHO === PUBLIC-ONLY SHORT OUTPUT === >> F:\NDCMP\RUN.LOG
|
||||
\PUBLIC\NDIR F:\TNDIR /SUB /SHORT > F:\NDCMP\SHORTOUT\S15_SUB.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR /SUB /RIGHTS /SHORT > F:\NDCMP\SHORTOUT\S16_SUBR.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /SHORT > F:\NDCMP\SHORTOUT\S17_MATR.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\MAT /SUB /RIGHTS /SHORT > F:\NDCMP\SHORTOUT\S23_MSRG.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\USR /SUB /RIGHTS /SHORT > F:\NDCMP\SHORTOUT\S31_USRS.OUT
|
||||
|
||||
ECHO === D90 MISSING / D99 HELP === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\NDIR F:\TNDIR\*.ZZZ > F:\NDCMP\OUT\D90_MISS.OUT
|
||||
\PUBLIC\NDIR F:\TNDIR\*.ZZZ > F:\NDCMP\PUBOUT\D90_MISS.OUT
|
||||
\NPUBLIC\NDIR /HELP > F:\NDCMP\OUT\D99_HELP.OUT
|
||||
\PUBLIC\NDIR /HELP > F:\NDCMP\PUBOUT\D99_HELP.OUT
|
||||
|
||||
ECHO === DIRECT COMPARE === > F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D01_ROOT.OUT F:\NDCMP\PUBOUT\D01_ROOT.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D02_ALFA.OUT F:\NDCMP\PUBOUT\D02_ALFA.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D03_DATE.OUT F:\NDCMP\PUBOUT\D03_DATE.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D04_RGHT.OUT F:\NDCMP\PUBOUT\D04_RGHT.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D05_ATTR.OUT F:\NDCMP\PUBOUT\D05_ATTR.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D06_H.OUT F:\NDCMP\PUBOUT\D06_H.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D07_RO.OUT F:\NDCMP\PUBOUT\D07_RO.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D08_SY.OUT F:\NDCMP\PUBOUT\D08_SY.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D09_A.OUT F:\NDCMP\PUBOUT\D09_A.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D10_NOTH.OUT F:\NDCMP\PUBOUT\D10_NOTH.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D11_TXT.OUT F:\NDCMP\PUBOUT\D11_TXT.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D12_DAT.OUT F:\NDCMP\PUBOUT\D12_DAT.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D13_FO.OUT F:\NDCMP\PUBOUT\D13_FO.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D14_DO.OUT F:\NDCMP\PUBOUT\D14_DO.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D15_SUB.OUT F:\NDCMP\PUBOUT\D15_SUB.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D16_SUBR.OUT F:\NDCMP\PUBOUT\D16_SUBR.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D17_MATR.OUT F:\NDCMP\PUBOUT\D17_MATR.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D18_MDAT.OUT F:\NDCMP\PUBOUT\D18_MDAT.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D19_MRGT.OUT F:\NDCMP\PUBOUT\D19_MRGT.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D20_MFO.OUT F:\NDCMP\PUBOUT\D20_MFO.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D21_MDO.OUT F:\NDCMP\PUBOUT\D21_MDO.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D22_MSUB.OUT F:\NDCMP\PUBOUT\D22_MSUB.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D23_MSRG.OUT F:\NDCMP\PUBOUT\D23_MSRG.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D24_MH.OUT F:\NDCMP\PUBOUT\D24_MH.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D25_MRO.OUT F:\NDCMP\PUBOUT\D25_MRO.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D26_MSY.OUT F:\NDCMP\PUBOUT\D26_MSY.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D27_MA.OUT F:\NDCMP\PUBOUT\D27_MA.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D28_MNH.OUT F:\NDCMP\PUBOUT\D28_MNH.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D29_MTXT.OUT F:\NDCMP\PUBOUT\D29_MTXT.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D30_USRR.OUT F:\NDCMP\PUBOUT\D30_USRR.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D31_USRS.OUT F:\NDCMP\PUBOUT\D31_USRS.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D32_USRD.OUT F:\NDCMP\PUBOUT\D32_USRD.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D33_USRT.OUT F:\NDCMP\PUBOUT\D33_USRT.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D34_USRD.OUT F:\NDCMP\PUBOUT\D34_USRD.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D90_MISS.OUT F:\NDCMP\PUBOUT\D90_MISS.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
FC F:\NDCMP\OUT\D99_HELP.OUT F:\NDCMP\PUBOUT\D99_HELP.OUT >> F:\NDCMP\COMPARE.LOG
|
||||
|
||||
REM --- Setup NOPASSUSER matrix. ---
|
||||
ECHO === USER CONTEXT SETUP === >> F:\NDCMP\RUN.LOG
|
||||
\NPUBLIC\GRANT R F FOR F:\TNDIR TO USER NOPASSUSER > F:\NDCMP\SETUP\S00_ROOT.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\TNDIR\URF TO USER NOPASSUSER > F:\NDCMP\SETUP\S10_RF.OUT
|
||||
\NPUBLIC\GRANT R W C E M F A FOR F:\TNDIR\UFULL TO USER NOPASSUSER > F:\NDCMP\SETUP\S11_FULL.OUT
|
||||
\NPUBLIC\GRANT S FOR F:\TNDIR\US TO USER NOPASSUSER > F:\NDCMP\SETUP\S12_S.OUT
|
||||
\NPUBLIC\GRANT N FOR F:\TNDIR\UNONE TO USER NOPASSUSER > F:\NDCMP\SETUP\S13_N.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\TNDIR\USUB TO USER NOPASSUSER > F:\NDCMP\SETUP\S14_SUB.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\TNDIR\USUB\CHILD TO USER NOPASSUSER > F:\NDCMP\SETUP\S15_CHLD.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\TNDIR\MAT TO USER NOPASSUSER > F:\NDCMP\SETUP\S20_MATR.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\TNDIR\MAT\D_SUB TO USER NOPASSUSER > F:\NDCMP\SETUP\S21_MSUD.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\TNDIR\MAT\D_SUB\CHILD TO USER NOPASSUSER > F:\NDCMP\SETUP\S22_MCHD.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\TNDIR\USR TO USER NOPASSUSER > F:\NDCMP\SETUP\S30_USR.OUT
|
||||
\NPUBLIC\GRANT R FOR F:\TNDIR\USR\U_EVERYR TO GROUP EVERYONE > F:\NDCMP\SETUP\S31_EVR.OUT
|
||||
\NPUBLIC\GRANT R W C E M F A FOR F:\TNDIR\USR\U_EVERYF TO GROUP EVERYONE > F:\NDCMP\SETUP\S32_EVF.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\TNDIR\USR\U_MARIO TO USER MARIO > F:\NDCMP\SETUP\S33_MAR.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\TNDIR\USR\U_GUEST TO USER GUEST > F:\NDCMP\SETUP\S34_GST.OUT
|
||||
\NPUBLIC\GRANT W C M FOR F:\TNDIR\USR\U_NOPWCM TO USER NOPASSUSER > F:\NDCMP\SETUP\S35_WCM.OUT
|
||||
\NPUBLIC\GRANT R E M A FOR F:\TNDIR\USR\U_NOPREM TO USER NOPASSUSER > F:\NDCMP\SETUP\S36_REM.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\TNDIR\USR\U_NOPRF TO USER NOPASSUSER > F:\NDCMP\SETUP\S37_RF.OUT
|
||||
\NPUBLIC\GRANT R F FOR F:\TNDIR\USR\U_CHILD TO GROUP EVERYONE > F:\NDCMP\SETUP\S38_CHLD.OUT
|
||||
\NPUBLIC\GRANT S FOR F:\TNDIR\USR\U_CHILD\DEEP TO USER NOPASSUSER > F:\NDCMP\SETUP\S39_DEEP.OUT
|
||||
|
||||
REM --- Prepare local delayed helper. ---
|
||||
MD C:\NDIRTMP
|
||||
MD C:\NDIRTMP\UNOV
|
||||
MD C:\NDIRTMP\UPUB
|
||||
IF EXIST C:\NDIRTMP\HELPER.TXT DEL C:\NDIRTMP\HELPER.TXT
|
||||
COPY F:\NDIRC.BAT C:\NDIRTMP\NDIRC.BAT > NUL
|
||||
COPY F:\PUBLIC\DLYSTRT.EXE C:\NDIRTMP\DLYSTRT.EXE > NUL
|
||||
|
||||
C:
|
||||
CD \NDIRTMP
|
||||
DLYSTRT /T:2 NDIRC.BAT
|
||||
GOTO END
|
||||
|
||||
:PART2
|
||||
F:
|
||||
CD \
|
||||
IF NOT EXIST NDCMP\NUL MD NDCMP
|
||||
IF NOT EXIST NDCMP\UNOV\NUL MD NDCMP\UNOV
|
||||
IF NOT EXIST NDCMP\UPUB\NUL MD NDCMP\UPUB
|
||||
IF NOT EXIST NDCMP\USHORT\NUL MD NDCMP\USHORT
|
||||
IF NOT EXIST NDCMP\USETUP\NUL MD NDCMP\USETUP
|
||||
|
||||
COPY C:\NDIRTMP\UNOV\*.OUT F:\NDCMP\UNOV > NUL
|
||||
COPY C:\NDIRTMP\UPUB\*.OUT F:\NDCMP\UPUB > NUL
|
||||
IF EXIST C:\NDIRTMP\USHORT\*.OUT COPY C:\NDIRTMP\USHORT\*.OUT F:\NDCMP\USHORT > NUL
|
||||
IF EXIST C:\NDIRTMP\HELPER.TXT COPY C:\NDIRTMP\HELPER.TXT F:\NDCMP\HELPER.TXT > NUL
|
||||
IF EXIST C:\NDIRTMP\UCOMP.LOG COPY C:\NDIRTMP\UCOMP.LOG F:\NDCMP\UCOMP.LOG > NUL
|
||||
|
||||
ECHO === SUMMARY === > F:\NDCMP\SUMMARY.TXT
|
||||
ECHO NDIRTSTA automated Novell NDIR baseline finished. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO NDIRTSTA compare test finished. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO Outputs are in F:\NDCMP\OUT. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO Expected highlights: >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO - N01_ROOT lists ALPHA.TXT, BETA.TXT, GAMMA.DAT and SUBDIR. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO - N03_DATES shows date fields. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO - N04_RGT shows rights. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO - N05_FLG* shows H, RO, SY/A attribute setup. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO - N07_* filters isolate attributes. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO - N09_* sort modes run without error. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO - N10_TXT lists TXT files; N10_DAT lists GAMMA.DAT. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO - N11_FO/N11_DO separate files/directories where supported. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO - N12_SUB includes SUBDIR\SUB.TXT. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO Optional pack results with NDIRZIP.BAT. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO Direct output: OUT vs PUBOUT, see COMPARE.LOG. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO User-context output: UNOV vs UPUB, see UCOMP.LOG. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO Public-only /SHORT output: SHORTOUT and USHORT, not compared. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO Matrix coverage: D17-D34 and U17-U30 cover mixed file, directory and user trustee matrices. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\NDCMP\SUMMARY.TXT
|
||||
ECHO Optional: NDIRZIP ausfuehren. >> F:\NDCMP\SUMMARY.TXT
|
||||
|
||||
ECHO.
|
||||
ECHO NDIRTSTA fertig.
|
||||
ECHO NDIRTSTA PART2 fertig.
|
||||
ECHO Ergebnisse liegen in F:\NDCMP
|
||||
ECHO Optional: NDIRZIP ausfuehren.
|
||||
ECHO.
|
||||
GOTO END
|
||||
|
||||
:NEEDPWD
|
||||
ECHO.
|
||||
ECHO ERROR: LGNTPWD ist nicht gesetzt.
|
||||
ECHO.
|
||||
ECHO Fuer den vollautomatischen NDIR-User-Kontext-Test zuerst setzen, z.B.:
|
||||
ECHO SET LGNTPWD=dein-supervisor-passwort
|
||||
ECHO Danach starten:
|
||||
ECHO F:\NDIRTSTA
|
||||
ECHO.
|
||||
ECHO Es wurde kein DLYSTRT installiert und kein Login-Test gestartet.
|
||||
GOTO END
|
||||
|
||||
:END
|
||||
|
||||
@@ -1,27 +1,26 @@
|
||||
@ECHO OFF
|
||||
REM NDIRZIP.BAT
|
||||
REM Optional packer for NDIRTSTA result files.
|
||||
REM Requires ZIP.EXE in PATH or current directory.
|
||||
|
||||
F:
|
||||
CD \NDCMP
|
||||
|
||||
IF EXIST NDIRTSTA.ZIP DEL NDIRTSTA.ZIP
|
||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
||||
|
||||
ECHO Creating NDIRTSTA.ZIP > ZIP.LOG
|
||||
ZIP -r NDIRTSTA.ZIP RUN.LOG SUMMARY.TXT OUT >> ZIP.LOG
|
||||
|
||||
|
||||
REM Cleanup generated test directories after ZIP.
|
||||
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
|
||||
ECHO Cleaning generated test directories... >> ZIP.LOG
|
||||
IF EXIST \TNDIR\NUL DELTREE /Y \TNDIR >> ZIP.LOG
|
||||
IF EXIST \NDIRTEST\NUL DELTREE /Y \NDIRTEST >> ZIP.LOG
|
||||
CD \
|
||||
ECHO.
|
||||
ECHO ZIP step finished.
|
||||
ECHO Check:
|
||||
ECHO F:\NDCMP\NDIRTSTA.ZIP
|
||||
ECHO F:\NDCMP\ZIP.LOG
|
||||
ECHO.
|
||||
@ECHO OFF
|
||||
REM NDIRZIP.BAT
|
||||
REM Optional packer for NDIRTSTA result files.
|
||||
REM Requires ZIP.EXE in PATH or current directory.
|
||||
|
||||
F:
|
||||
CD \NDCMP
|
||||
|
||||
IF EXIST NDIRTSTA.ZIP DEL NDIRTSTA.ZIP
|
||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
||||
|
||||
ECHO Creating NDIRTSTA.ZIP > ZIP.LOG
|
||||
ZIP -r NDIRTSTA.ZIP RUN.LOG SUMMARY.TXT COMPARE.LOG UCOMP.LOG HELPER.TXT OUT PUBOUT SHORTOUT SETUP UNOV UPUB USHORT USETUP >> ZIP.LOG
|
||||
|
||||
REM Cleanup generated test directories after ZIP.
|
||||
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
|
||||
ECHO Cleaning generated test directories... >> ZIP.LOG
|
||||
IF EXIST \TNDIR\NUL DELTREE /Y \TNDIR >> ZIP.LOG
|
||||
IF EXIST C:\NDIRTMP\NUL DELTREE /Y C:\NDIRTMP >> ZIP.LOG
|
||||
CD \
|
||||
ECHO.
|
||||
ECHO ZIP step finished.
|
||||
ECHO Check:
|
||||
ECHO F:\NDCMP\NDIRTSTA.ZIP
|
||||
ECHO F:\NDCMP\ZIP.LOG
|
||||
ECHO.
|
||||
|
||||
@@ -1,19 +1,30 @@
|
||||
# NDIR automated test
|
||||
# NDIR automated compare test
|
||||
|
||||
Automated Novell-only baseline for `NPUBLIC\NDIR`.
|
||||
Automated compare test for `NDIR`.
|
||||
|
||||
## Run
|
||||
|
||||
```text
|
||||
SET LGNTPWD=dein-supervisor-passwort
|
||||
F:
|
||||
CD \
|
||||
NDIRTSTA
|
||||
```
|
||||
|
||||
Results:
|
||||
`LGNTPWD` is required because the test switches to `NOPASSUSER` and then logs back in as `SUPERVISOR` through the maintainer-only `LOGIN /PWD:` path.
|
||||
|
||||
## Result layout
|
||||
|
||||
```text
|
||||
F:\NDCMP\RUN.LOG
|
||||
F:\NDCMP\SUMMARY.TXT
|
||||
F:\NDCMP\OUT\*.OUT
|
||||
F:\NDCMP\OUT\*.OUT Novell baseline via \NPUBLIC\NDIR
|
||||
F:\NDCMP\PUBOUT\*.OUT PUBLIC implementation via \PUBLIC\NDIR
|
||||
F:\NDCMP\COMPARE.LOG direct compare log
|
||||
F:\NDCMP\SHORTOUT\*.OUT PUBLIC-only /SHORT helper output; not compared
|
||||
|
||||
F:\NDCMP\UNOV\*.OUT Novell NDIR as NOPASSUSER
|
||||
F:\NDCMP\UPUB\*.OUT PUBLIC NDIR as NOPASSUSER
|
||||
F:\NDCMP\UCOMP.LOG user-context compare log
|
||||
F:\NDCMP\USHORT\*.OUT PUBLIC-only /SHORT helper output as NOPASSUSER
|
||||
```
|
||||
|
||||
Optional pack:
|
||||
@@ -48,9 +59,38 @@ F:\TNDIR
|
||||
- `/DATES`
|
||||
- `/RIGHTS`
|
||||
- attributes via `NPUBLIC\FLAG`
|
||||
- filters `/H`, `/RO`, `/SY`, `/A`, `/NOT H`, `/NOT RO`
|
||||
- sorts `/SORT UN`, `/SORT SI`, `/SORT UP`
|
||||
- filters `/H`, `/RO`, `/SY`, `/A`, `/NOT H`
|
||||
- wildcards `*.TXT`, `*.DAT`
|
||||
- `/FO`, `/DO`
|
||||
- `/SUB`
|
||||
- cleanup
|
||||
- `/SUB` and `/SUB /RIGHTS` in the Novell-compatible compare set
|
||||
- extended file/directory matrix under `F:\TNDIR\MAT`:
|
||||
- files with Normal, Hidden, Read-only, System, Archive, DI/RI and mixed attributes
|
||||
- directories with Normal, Hidden, System, Purge, DI/RI and mixed directory flags
|
||||
- matrix checks for normal listing, `/DATES`, `/RIGHTS`, `/FO`, `/DO`, `/SUB`, filters and wildcards
|
||||
- Public-only `/SHORT` output in `SHORTOUT` / `USHORT` is kept for diagnostics and is not compared against Novell
|
||||
- missing-pattern and help output
|
||||
- NOPASSUSER readback after GRANT matrix setup, including the extended `MAT` file/directory matrix
|
||||
|
||||
`NDIRZIP` cleans the generated `TNDIR` tree and `C:\NDIRTMP` helper directory after packaging.
|
||||
|
||||
## Notes on /SHORT
|
||||
|
||||
`/SHORT` is a MARS DOS tools helper option. Novell NDIR does not know this option,
|
||||
so the test keeps `/SHORT` output in `SHORTOUT` and `USHORT` only. These files are
|
||||
packaged for manual inspection but are not part of the byte-for-byte Novell compare.
|
||||
|
||||
|
||||
Additional user/trustee matrix
|
||||
------------------------------
|
||||
The extended matrix also creates F:\TNDIR\USR with trustees for multiple
|
||||
objects that exist in the default test environment:
|
||||
|
||||
- USER NOPASSUSER
|
||||
- USER MARIO
|
||||
- USER GUEST
|
||||
- GROUP EVERYONE
|
||||
|
||||
The delayed NOPASSUSER phase reads the same tree through NPUBLIC and PUBLIC
|
||||
NDIR. This gives more coverage for effective-rights output: direct user
|
||||
trustees, group/EVERYONE trustees, unrelated user trustees, inherited rights,
|
||||
and Supervisor-on-child cases.
|
||||
|
||||
@@ -1,31 +1,32 @@
|
||||
# REVOKE baseline test
|
||||
# REVOKE comparison test
|
||||
|
||||
Scripts:
|
||||
`RVKSTA.BAT` creates `F:\RVKTEST` and compares Novell `\NPUBLIC\REVOKE` output with the public implementation `\PUBLIC\REVOKE`.
|
||||
|
||||
- `RVKSTA.BAT` creates `F:\RVKTEST`, uses Novell `\NPUBLIC\GRANT` for setup, then captures Novell `\NPUBLIC\REVOKE` output into `F:\RVKCMP\OUT`. User `MARIO` is used as trustee target.
|
||||
- `RVKZIP.BAT` packages `RUN.LOG`, `SUMMARY.TXT`, `SETUP`, and `OUT` as `F:\RVKCMP\RVKSTA.ZIP`.
|
||||
Result tree:
|
||||
|
||||
Run as `SUPERVISOR` or an equivalent user with Access Control rights on `F:\RVKTEST`.
|
||||
- `F:\RVKCMP\OUT` - Novell baseline output
|
||||
- `F:\RVKCMP\PUBOUT` - public implementation output
|
||||
- `F:\RVKCMP\COMPARE.LOG` - direct `FC` comparisons
|
||||
- `F:\RVKCMP\UNOV` - user-context Novell `RIGHTS` readback
|
||||
- `F:\RVKCMP\UPUB` - user-context public `RIGHTS` readback
|
||||
- `F:\RVKCMP\UCOMP.LOG` - user-context `FC` comparisons
|
||||
|
||||
Covered cases:
|
||||
The direct matrix covers:
|
||||
|
||||
- help and no-argument grammar
|
||||
- normal directory revoke
|
||||
- `ALL` revoke / trustee removal
|
||||
- `/SUBDIRECTORIES` with trustees placed directly on child directories
|
||||
- `/FILES` on an explicit file and on a directory file set
|
||||
- relative path invocation from inside the test directory while invoking `\NPUBLIC\REVOKE` absolutely
|
||||
- no trustee, missing user, missing path behavior, `/FILES` plus `/SUBDIRECTORIES` option-combination behavior, and bad grammar
|
||||
- individual right removal: `R`, `W`, `C`, `E`, `M`, `F`, `A`, `S`
|
||||
- mixed rights removal such as `R F`, `R W C`, `E M F`, `S W C M`
|
||||
- `ALL` removal, which should delete the trustee entry
|
||||
- file-specific mode with `/FILES`
|
||||
- recursive directory mode with `/SUBDIRECTORIES`
|
||||
- missing trustee, missing user, missing path, invalid right, bad grammar, and `/FILES /SUBDIRECTORIES`
|
||||
|
||||
This test is still Novell-baseline-only. Later comparison scripts should run the same command set through `NPUBLIC` and `PUBLIC` with normalized output.
|
||||
Automatic user-context readback requires:
|
||||
|
||||
Notes from the first baseline run:
|
||||
```bat
|
||||
SET LGNTPWD=your-supervisor-password
|
||||
F:\RVKSTA
|
||||
```
|
||||
|
||||
- `REVOKE /SUBDIRECTORIES` did not exercise child paths unless trustees existed on the child directories themselves, so `D20` now uses `SUBTST\S1` and `SUBTST\S2` with direct trustee setup.
|
||||
- Novell `REVOKE` may report `No trustee for the specified directory.` for a missing path before a separate missing-path diagnostic is reached; `D92` records that baseline behavior.
|
||||
- `D93` now uses an independent tree with directory, file, and subdirectory trustees so the `/FILES /SUBDIRECTORIES` option combination is tested without being masked by missing trustee setup.
|
||||
Retest focus after the fix:
|
||||
`RVKC.BAT` is queued via `DLYSTRT`, logs in as `NOPASSUSER`, captures `RIGHTS` output for the matrix cases, logs SUPERVISOR back in, and then starts `RVKSTA PART2` to copy and compare the user-context results.
|
||||
|
||||
- `D20_SUBDIRS_REVOKE_CE.OUT` should no longer be masked by a missing trustee on the named root.
|
||||
- `D92_MISSING_PATH.OUT` records the exact Novell diagnostic for a missing path, even if that diagnostic is still `No trustee for the specified directory.`
|
||||
- `D93_FILES_AND_SUBDIRS.OUT` runs on a prepared tree with directory, file, and subdirectory trustees, so the `/FILES /SUBDIRECTORIES` combination is no longer masked by setup.
|
||||
`RVKZIP.BAT` packs the result tree and cleans `F:\RVKTEST` and `C:\RVKTMP`.
|
||||
|
||||
168
test/revoke/RVKC.BAT
Normal file
168
test/revoke/RVKC.BAT
Normal file
@@ -0,0 +1,168 @@
|
||||
@ECHO OFF
|
||||
REM RVKC.BAT - delayed user-context REVOKE readback helper.
|
||||
REM Started by RVKSTA via DLYSTRT. Runs from C:\RVKTMP.
|
||||
|
||||
C:
|
||||
CD \RVKTMP
|
||||
|
||||
ECHO RVKC user-context REVOKE readback helper > HELPER.TXT
|
||||
ECHO Current phase: logout supervisor, login NOPASSUSER. >> HELPER.TXT
|
||||
|
||||
LOGOUT > ULOG1.OUT
|
||||
LOGIN NOPASSUSER > ULOGIN.OUT
|
||||
|
||||
IF NOT EXIST UNOV MD UNOV
|
||||
IF NOT EXIST UPUB MD UPUB
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST \NPUBLIC\RIGHTS.EXE GOTO HAVEF
|
||||
ECHO F: not ready after NOPASSUSER login. >> C:\RVKTMP\HELPER.TXT
|
||||
GOTO RELSUP
|
||||
|
||||
:HAVEF
|
||||
ECHO Starting G10_R as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G10 > C:\RVKTMP\UNOV\G10_R.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G10 > C:\RVKTMP\UPUB\G10_R.OUT
|
||||
ECHO Starting G11_W as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G11 > C:\RVKTMP\UNOV\G11_W.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G11 > C:\RVKTMP\UPUB\G11_W.OUT
|
||||
ECHO Starting G12_C as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G12 > C:\RVKTMP\UNOV\G12_C.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G12 > C:\RVKTMP\UPUB\G12_C.OUT
|
||||
ECHO Starting G13_E as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G13 > C:\RVKTMP\UNOV\G13_E.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G13 > C:\RVKTMP\UPUB\G13_E.OUT
|
||||
ECHO Starting G14_M as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G14 > C:\RVKTMP\UNOV\G14_M.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G14 > C:\RVKTMP\UPUB\G14_M.OUT
|
||||
ECHO Starting G15_F as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G15 > C:\RVKTMP\UNOV\G15_F.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G15 > C:\RVKTMP\UPUB\G15_F.OUT
|
||||
ECHO Starting G16_A as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G16 > C:\RVKTMP\UNOV\G16_A.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G16 > C:\RVKTMP\UPUB\G16_A.OUT
|
||||
ECHO Starting G17_S as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G17 > C:\RVKTMP\UNOV\G17_S.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G17 > C:\RVKTMP\UPUB\G17_S.OUT
|
||||
ECHO Starting G20_RF as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G20 > C:\RVKTMP\UNOV\G20_RF.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G20 > C:\RVKTMP\UPUB\G20_RF.OUT
|
||||
ECHO Starting G21_RW as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G21 > C:\RVKTMP\UNOV\G21_RW.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G21 > C:\RVKTMP\UPUB\G21_RW.OUT
|
||||
ECHO Starting G22_RWC as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G22 > C:\RVKTMP\UNOV\G22_RWC.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G22 > C:\RVKTMP\UPUB\G22_RWC.OUT
|
||||
ECHO Starting G23_RWCE as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G23 > C:\RVKTMP\UNOV\G23_RWCE.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G23 > C:\RVKTMP\UPUB\G23_RWCE.OUT
|
||||
ECHO Starting G24_EMF as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G24 > C:\RVKTMP\UNOV\G24_EMF.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G24 > C:\RVKTMP\UPUB\G24_EMF.OUT
|
||||
ECHO Starting G25_SAL as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G25 > C:\RVKTMP\UNOV\G25_SAL.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G25 > C:\RVKTMP\UPUB\G25_SAL.OUT
|
||||
ECHO Starting G26_ALL as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G26 > C:\RVKTMP\UNOV\G26_ALL.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G26 > C:\RVKTMP\UPUB\G26_ALL.OUT
|
||||
ECHO Starting G30_RE as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G30 > C:\RVKTMP\UNOV\G30_RE.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G30 > C:\RVKTMP\UPUB\G30_RE.OUT
|
||||
ECHO Starting G31_RWF as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G31 > C:\RVKTMP\UNOV\G31_RWF.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G31 > C:\RVKTMP\UPUB\G31_RWF.OUT
|
||||
ECHO Starting G32_RCM as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G32 > C:\RVKTMP\UNOV\G32_RCM.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G32 > C:\RVKTMP\UPUB\G32_RCM.OUT
|
||||
ECHO Starting G33_RFA as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G33 > C:\RVKTMP\UNOV\G33_RFA.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G33 > C:\RVKTMP\UPUB\G33_RFA.OUT
|
||||
ECHO Starting G34_WCM as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G34 > C:\RVKTMP\UNOV\G34_WCM.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G34 > C:\RVKTMP\UPUB\G34_WCM.OUT
|
||||
ECHO Starting G35_EMF as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G35 > C:\RVKTMP\UNOV\G35_EMF.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G35 > C:\RVKTMP\UPUB\G35_EMF.OUT
|
||||
ECHO Starting G36_RMF as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G36 > C:\RVKTMP\UNOV\G36_RMF.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G36 > C:\RVKTMP\UPUB\G36_RMF.OUT
|
||||
ECHO Starting G37_REMA as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G37 > C:\RVKTMP\UNOV\G37_REMA.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G37 > C:\RVKTMP\UPUB\G37_REMA.OUT
|
||||
ECHO Starting G38_SR as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G38 > C:\RVKTMP\UNOV\G38_SR.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G38 > C:\RVKTMP\UPUB\G38_SR.OUT
|
||||
ECHO Starting G39_SRF as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G39 > C:\RVKTMP\UNOV\G39_SRF.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G39 > C:\RVKTMP\UPUB\G39_SRF.OUT
|
||||
ECHO Starting G40_SWCM as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\G40 > C:\RVKTMP\UNOV\G40_SWCM.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\G40 > C:\RVKTMP\UPUB\G40_SWCM.OUT
|
||||
ECHO Starting F10_R as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\F10\T.TXT > C:\RVKTMP\UNOV\F10_R.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\F10\T.TXT > C:\RVKTMP\UPUB\F10_R.OUT
|
||||
ECHO Starting F11_RF as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\F11\T.TXT > C:\RVKTMP\UNOV\F11_RF.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\F11\T.TXT > C:\RVKTMP\UPUB\F11_RF.OUT
|
||||
ECHO Starting F12_RAL as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\F12\T.TXT > C:\RVKTMP\UNOV\F12_RAL.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\F12\T.TXT > C:\RVKTMP\UPUB\F12_RAL.OUT
|
||||
ECHO Starting F13_ALL as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\F13\T.TXT > C:\RVKTMP\UNOV\F13_ALL.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\F13\T.TXT > C:\RVKTMP\UPUB\F13_ALL.OUT
|
||||
ECHO Starting F14_N as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\F14\T.TXT > C:\RVKTMP\UNOV\F14_N.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\F14\T.TXT > C:\RVKTMP\UPUB\F14_N.OUT
|
||||
ECHO Starting F15_S as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\F15\T.TXT > C:\RVKTMP\UNOV\F15_S.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\F15\T.TXT > C:\RVKTMP\UPUB\F15_S.OUT
|
||||
ECHO Starting F16_SAL as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\F16\T.TXT > C:\RVKTMP\UNOV\F16_SAL.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\F16\T.TXT > C:\RVKTMP\UPUB\F16_SAL.OUT
|
||||
ECHO Starting S10_R as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\S10\S1 > C:\RVKTMP\UNOV\S10_R.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\S10\S1 > C:\RVKTMP\UPUB\S10_R.OUT
|
||||
ECHO Starting S11_RWC as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\S11\S1 > C:\RVKTMP\UNOV\S11_RWC.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\S11\S1 > C:\RVKTMP\UPUB\S11_RWC.OUT
|
||||
ECHO Starting S12_ALL as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\S12\S1 > C:\RVKTMP\UNOV\S12_ALL.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\S12\S1 > C:\RVKTMP\UPUB\S12_ALL.OUT
|
||||
ECHO Starting S13_SAL as NOPASSUSER... >> C:\RVKTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\RVKTEST\S13\S1 > C:\RVKTMP\UNOV\S13_SAL.OUT
|
||||
\PUBLIC\RIGHTS F:\RVKTEST\S13\S1 > C:\RVKTMP\UPUB\S13_SAL.OUT
|
||||
|
||||
:RELSUP
|
||||
C:
|
||||
CD \RVKTMP
|
||||
LOGOUT > ULOG2.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST \LOGIN\LOGIN.EXE GOTO HAVELOG
|
||||
ECHO F:\LOGIN\LOGIN.EXE not found. >> C:\RVKTMP\HELPER.TXT
|
||||
GOTO MANUAL
|
||||
|
||||
:HAVELOG
|
||||
F:\LOGIN\LOGIN SUPERVISOR /PWD:%LGNTPWD% > C:\RVKTMP\ULGSUP.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST \RVKSTA.BAT GOTO QUEUEP2
|
||||
ECHO F: not restored or \RVKSTA.BAT missing. >> C:\RVKTMP\HELPER.TXT
|
||||
GOTO MANUAL
|
||||
|
||||
:QUEUEP2
|
||||
C:
|
||||
CD \RVKTMP
|
||||
DLYSTRT /T:2 F:\RVKSTA.BAT PART2
|
||||
GOTO END
|
||||
|
||||
:MANUAL
|
||||
ECHO Please run manually after SUPERVISOR login: >> C:\RVKTMP\HELPER.TXT
|
||||
ECHO F: >> C:\RVKTMP\HELPER.TXT
|
||||
ECHO CD \ >> C:\RVKTMP\HELPER.TXT
|
||||
ECHO RVKSTA PART2 >> C:\RVKTMP\HELPER.TXT
|
||||
|
||||
:END
|
||||
@@ -1,121 +1,698 @@
|
||||
@ECHO OFF
|
||||
REM RVKSTA.BAT
|
||||
REM Automated REVOKE baseline test for MARS NWE.
|
||||
REM Automated REVOKE comparison test for MARS NWE.
|
||||
REM
|
||||
REM Run as SUPERVISOR or a user with Access Control on F:\RVKTEST.
|
||||
REM Uses \NPUBLIC\GRANT for setup and \NPUBLIC\REVOKE as Novell baseline.
|
||||
REM Direct mode:
|
||||
REM OUT = Novell baseline using \NPUBLIC\REVOKE
|
||||
REM PUBOUT = our implementation using \PUBLIC\REVOKE
|
||||
REM
|
||||
REM Result tree:
|
||||
REM F:\RVKCMP
|
||||
REM Test tree:
|
||||
REM F:\RVKTEST
|
||||
REM User-context mode:
|
||||
REM REVOKE runs as SUPERVISOR against NOPASSUSER.
|
||||
REM DLYSTRT starts C:\RVKTMP\RVKC.BAT after this script exits.
|
||||
REM RVKC logs in as NOPASSUSER and compares effective RIGHTS readback.
|
||||
REM
|
||||
REM Optional automatic user-context mode requires:
|
||||
REM SET LGNTPWD=your-supervisor-password
|
||||
|
||||
IF "%1"=="" GOTO PART1
|
||||
IF "%1"=="PART2" GOTO PART2
|
||||
IF "%1"=="part2" GOTO PART2
|
||||
IF "%1"=="Part2" GOTO PART2
|
||||
ECHO Usage: RVKSTA [PART2]
|
||||
GOTO END
|
||||
|
||||
:PART1
|
||||
F:
|
||||
CD \
|
||||
|
||||
REM --- Clean generated test/result directories (contents only). ---
|
||||
IF EXIST RVKTEST\NUL DELTREE /Y RVKTEST\*.*
|
||||
IF EXIST RVKCMP\NUL DELTREE /Y RVKCMP\*.*
|
||||
REM --- Clean generated test/result directories. ---
|
||||
IF EXIST RVKTEST\*.* DELTREE /Y RVKTEST
|
||||
IF EXIST RVKCMP\*.* DELTREE /Y RVKCMP
|
||||
IF EXIST C:\RVKTMP\*.* DELTREE /Y C:\RVKTMP
|
||||
|
||||
IF NOT EXIST RVKTEST\NUL MD RVKTEST
|
||||
IF NOT EXIST RVKTEST\ONE\NUL MD RVKTEST\ONE
|
||||
IF NOT EXIST RVKTEST\TREE\NUL MD RVKTEST\TREE
|
||||
IF NOT EXIST RVKTEST\TREE\SUB1\NUL MD RVKTEST\TREE\SUB1
|
||||
IF NOT EXIST RVKTEST\TREE\SUB2\NUL MD RVKTEST\TREE\SUB2
|
||||
IF NOT EXIST RVKTEST\SUBTST\NUL MD RVKTEST\SUBTST
|
||||
IF NOT EXIST RVKTEST\SUBTST\S1\NUL MD RVKTEST\SUBTST\S1
|
||||
IF NOT EXIST RVKTEST\SUBTST\S2\NUL MD RVKTEST\SUBTST\S2
|
||||
IF NOT EXIST RVKTEST\OPTBOTH\NUL MD RVKTEST\OPTBOTH
|
||||
IF NOT EXIST RVKTEST\OPTBOTH\SUB\NUL MD RVKTEST\OPTBOTH\SUB
|
||||
IF NOT EXIST RVKTEST\FILES\NUL MD RVKTEST\FILES
|
||||
IF NOT EXIST RVKTEST\EMPTY\NUL MD RVKTEST\EMPTY
|
||||
IF NOT EXIST RVKCMP\NUL MD RVKCMP
|
||||
IF NOT EXIST RVKCMP\OUT\NUL MD RVKCMP\OUT
|
||||
IF NOT EXIST RVKCMP\SETUP\NUL MD RVKCMP\SETUP
|
||||
IF NOT EXIST RVKTEST MD RVKTEST
|
||||
IF NOT EXIST RVKTEST\G10 MD RVKTEST\G10
|
||||
ECHO G10_R > F:\RVKTEST\G10\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G11 MD RVKTEST\G11
|
||||
ECHO G11_W > F:\RVKTEST\G11\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G12 MD RVKTEST\G12
|
||||
ECHO G12_C > F:\RVKTEST\G12\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G13 MD RVKTEST\G13
|
||||
ECHO G13_E > F:\RVKTEST\G13\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G14 MD RVKTEST\G14
|
||||
ECHO G14_M > F:\RVKTEST\G14\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G15 MD RVKTEST\G15
|
||||
ECHO G15_F > F:\RVKTEST\G15\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G16 MD RVKTEST\G16
|
||||
ECHO G16_A > F:\RVKTEST\G16\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G17 MD RVKTEST\G17
|
||||
ECHO G17_S > F:\RVKTEST\G17\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G20 MD RVKTEST\G20
|
||||
ECHO G20_RF > F:\RVKTEST\G20\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G21 MD RVKTEST\G21
|
||||
ECHO G21_RW > F:\RVKTEST\G21\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G22 MD RVKTEST\G22
|
||||
ECHO G22_RWC > F:\RVKTEST\G22\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G23 MD RVKTEST\G23
|
||||
ECHO G23_RWCE > F:\RVKTEST\G23\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G24 MD RVKTEST\G24
|
||||
ECHO G24_EMF > F:\RVKTEST\G24\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G25 MD RVKTEST\G25
|
||||
ECHO G25_SAL > F:\RVKTEST\G25\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G26 MD RVKTEST\G26
|
||||
ECHO G26_ALL > F:\RVKTEST\G26\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G30 MD RVKTEST\G30
|
||||
ECHO G30_RE > F:\RVKTEST\G30\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G31 MD RVKTEST\G31
|
||||
ECHO G31_RWF > F:\RVKTEST\G31\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G32 MD RVKTEST\G32
|
||||
ECHO G32_RCM > F:\RVKTEST\G32\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G33 MD RVKTEST\G33
|
||||
ECHO G33_RFA > F:\RVKTEST\G33\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G34 MD RVKTEST\G34
|
||||
ECHO G34_WCM > F:\RVKTEST\G34\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G35 MD RVKTEST\G35
|
||||
ECHO G35_EMF > F:\RVKTEST\G35\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G36 MD RVKTEST\G36
|
||||
ECHO G36_RMF > F:\RVKTEST\G36\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G37 MD RVKTEST\G37
|
||||
ECHO G37_REMA > F:\RVKTEST\G37\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G38 MD RVKTEST\G38
|
||||
ECHO G38_SR > F:\RVKTEST\G38\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G39 MD RVKTEST\G39
|
||||
ECHO G39_SRF > F:\RVKTEST\G39\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\G40 MD RVKTEST\G40
|
||||
ECHO G40_SWCM > F:\RVKTEST\G40\TEST.TXT
|
||||
IF NOT EXIST RVKTEST\F10 MD RVKTEST\F10
|
||||
ECHO F10_R > F:\RVKTEST\F10\T.TXT
|
||||
IF NOT EXIST RVKTEST\F11 MD RVKTEST\F11
|
||||
ECHO F11_RF > F:\RVKTEST\F11\T.TXT
|
||||
IF NOT EXIST RVKTEST\F12 MD RVKTEST\F12
|
||||
ECHO F12_RAL > F:\RVKTEST\F12\T.TXT
|
||||
IF NOT EXIST RVKTEST\F13 MD RVKTEST\F13
|
||||
ECHO F13_ALL > F:\RVKTEST\F13\T.TXT
|
||||
IF NOT EXIST RVKTEST\F14 MD RVKTEST\F14
|
||||
ECHO F14_N > F:\RVKTEST\F14\T.TXT
|
||||
IF NOT EXIST RVKTEST\F15 MD RVKTEST\F15
|
||||
ECHO F15_S > F:\RVKTEST\F15\T.TXT
|
||||
IF NOT EXIST RVKTEST\F16 MD RVKTEST\F16
|
||||
ECHO F16_SAL > F:\RVKTEST\F16\T.TXT
|
||||
IF NOT EXIST RVKTEST\S10 MD RVKTEST\S10
|
||||
IF NOT EXIST RVKTEST\S10\S1 MD RVKTEST\S10\S1
|
||||
IF NOT EXIST RVKTEST\S10\S2 MD RVKTEST\S10\S2
|
||||
ECHO S10_R root > F:\RVKTEST\S10\ROOT.TXT
|
||||
ECHO S10_R s1 > F:\RVKTEST\S10\S1\S1.TXT
|
||||
ECHO S10_R s2 > F:\RVKTEST\S10\S2\S2.TXT
|
||||
IF NOT EXIST RVKTEST\S11 MD RVKTEST\S11
|
||||
IF NOT EXIST RVKTEST\S11\S1 MD RVKTEST\S11\S1
|
||||
IF NOT EXIST RVKTEST\S11\S2 MD RVKTEST\S11\S2
|
||||
ECHO S11_RWC root > F:\RVKTEST\S11\ROOT.TXT
|
||||
ECHO S11_RWC s1 > F:\RVKTEST\S11\S1\S1.TXT
|
||||
ECHO S11_RWC s2 > F:\RVKTEST\S11\S2\S2.TXT
|
||||
IF NOT EXIST RVKTEST\S12 MD RVKTEST\S12
|
||||
IF NOT EXIST RVKTEST\S12\S1 MD RVKTEST\S12\S1
|
||||
IF NOT EXIST RVKTEST\S12\S2 MD RVKTEST\S12\S2
|
||||
ECHO S12_ALL root > F:\RVKTEST\S12\ROOT.TXT
|
||||
ECHO S12_ALL s1 > F:\RVKTEST\S12\S1\S1.TXT
|
||||
ECHO S12_ALL s2 > F:\RVKTEST\S12\S2\S2.TXT
|
||||
IF NOT EXIST RVKTEST\S13 MD RVKTEST\S13
|
||||
IF NOT EXIST RVKTEST\S13\S1 MD RVKTEST\S13\S1
|
||||
IF NOT EXIST RVKTEST\S13\S2 MD RVKTEST\S13\S2
|
||||
ECHO S13_SAL root > F:\RVKTEST\S13\ROOT.TXT
|
||||
ECHO S13_SAL s1 > F:\RVKTEST\S13\S1\S1.TXT
|
||||
ECHO S13_SAL s2 > F:\RVKTEST\S13\S2\S2.TXT
|
||||
IF NOT EXIST RVKTEST\EMPTY MD RVKTEST\EMPTY
|
||||
IF NOT EXIST RVKTEST\OPTBOTH MD RVKTEST\OPTBOTH
|
||||
IF NOT EXIST RVKTEST\OPTBOTH\SUB MD RVKTEST\OPTBOTH\SUB
|
||||
ECHO E94 root > F:\RVKTEST\OPTBOTH\ROOT.TXT
|
||||
ECHO E94 sub > F:\RVKTEST\OPTBOTH\SUB\SUB.TXT
|
||||
|
||||
ECHO REVOKE ONE FILE > F:\RVKTEST\ONE\ONE.TXT
|
||||
ECHO REVOKE TREE FILE > F:\RVKTEST\TREE\TROOT.TXT
|
||||
ECHO REVOKE SUB1 FILE > F:\RVKTEST\TREE\SUB1\SUB1.TXT
|
||||
ECHO REVOKE SUB2 FILE > F:\RVKTEST\TREE\SUB2\SUB2.TXT
|
||||
ECHO REVOKE SUBDIRECTORY S1 > F:\RVKTEST\SUBTST\S1\S1.TXT
|
||||
ECHO REVOKE SUBDIRECTORY S2 > F:\RVKTEST\SUBTST\S2\S2.TXT
|
||||
ECHO REVOKE OPTION ROOT > F:\RVKTEST\OPTBOTH\ROOT.TXT
|
||||
ECHO REVOKE OPTION SUB > F:\RVKTEST\OPTBOTH\SUB\SUB.TXT
|
||||
ECHO REVOKE FILE A > F:\RVKTEST\FILES\A.TXT
|
||||
ECHO REVOKE FILE B > F:\RVKTEST\FILES\B.TXT
|
||||
IF NOT EXIST RVKCMP MD RVKCMP
|
||||
IF NOT EXIST RVKCMP\OUT MD RVKCMP\OUT
|
||||
IF NOT EXIST RVKCMP\PUBOUT MD RVKCMP\PUBOUT
|
||||
IF NOT EXIST RVKCMP\SETUP MD RVKCMP\SETUP
|
||||
IF NOT EXIST RVKCMP\UNOV MD RVKCMP\UNOV
|
||||
IF NOT EXIST RVKCMP\UPUB MD RVKCMP\UPUB
|
||||
IF NOT EXIST RVKCMP\USETUP MD RVKCMP\USETUP
|
||||
IF NOT EXIST C:\RVKTMP MD C:\RVKTMP
|
||||
|
||||
ECHO RVKSTA REVOKE baseline test > F:\RVKCMP\RUN.LOG
|
||||
ECHO Run this as SUPERVISOR or equivalent. >> F:\RVKCMP\RUN.LOG
|
||||
ECHO Setup uses \NPUBLIC\GRANT, test captures \NPUBLIC\REVOKE output for user MARIO. >> F:\RVKCMP\RUN.LOG
|
||||
ECHO RVKSTA REVOKE comparison test > F:\RVKCMP\RUN.LOG
|
||||
ECHO OUT = Novell baseline with \NPUBLIC\REVOKE >> F:\RVKCMP\RUN.LOG
|
||||
ECHO PUBOUT = our implementation with \PUBLIC\REVOKE >> F:\RVKCMP\RUN.LOG
|
||||
ECHO User-context target: NOPASSUSER >> F:\RVKCMP\RUN.LOG
|
||||
ECHO. >> F:\RVKCMP\RUN.LOG
|
||||
|
||||
ECHO === SETUP grants === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\ONE TO USER MARIO > F:\RVKCMP\SETUP\S01_ONE_GRANT.OUT
|
||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\TREE TO USER MARIO /SUBDIRECTORIES > F:\RVKCMP\SETUP\S02_TREE_GRANT.OUT
|
||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\FILES\A.TXT TO USER MARIO /FILES > F:\RVKCMP\SETUP\S03_FILE_A_GRANT.OUT
|
||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\FILES\B.TXT TO USER MARIO /FILES > F:\RVKCMP\SETUP\S04_FILE_B_GRANT.OUT
|
||||
REM Direct subdirectory trustees for D20, because REVOKE /SUBDIRECTORIES acts on trustees below the named directory.
|
||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\SUBTST\S1 TO USER MARIO > F:\RVKCMP\SETUP\S05_SUBTST_S1_GRANT.OUT
|
||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\SUBTST\S2 TO USER MARIO > F:\RVKCMP\SETUP\S06_SUBTST_S2_GRANT.OUT
|
||||
REM Independent tree with both files and subdirectories for D93 option-combination behavior.
|
||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\OPTBOTH TO USER MARIO > F:\RVKCMP\SETUP\S07_OPTBOTH_ROOT_GRANT.OUT
|
||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\OPTBOTH\SUB TO USER MARIO > F:\RVKCMP\SETUP\S08_OPTBOTH_SUB_GRANT.OUT
|
||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\OPTBOTH\ROOT.TXT TO USER MARIO /FILES > F:\RVKCMP\SETUP\S09_OPTBOTH_FILE_GRANT.OUT
|
||||
|
||||
ECHO === D01 usage/help === >> F:\RVKCMP\RUN.LOG
|
||||
ECHO Starting D01_HELP...
|
||||
\NPUBLIC\REVOKE /? > F:\RVKCMP\OUT\D01_HELP.OUT
|
||||
\PUBLIC\REVOKE /? > F:\RVKCMP\PUBOUT\D01_HELP.OUT
|
||||
ECHO Starting D02_NOAR...
|
||||
\NPUBLIC\REVOKE > F:\RVKCMP\OUT\D02_NOAR.OUT
|
||||
\PUBLIC\REVOKE > F:\RVKCMP\PUBOUT\D02_NOAR.OUT
|
||||
|
||||
ECHO === D02 no arguments === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\REVOKE > F:\RVKCMP\OUT\D02_NOARGS.OUT
|
||||
ECHO Starting G10_R directory revoke R...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G10 > F:\RVKCMP\SETUP\G10_R_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G10 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G10_R_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\G10 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G10_R.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G10 > F:\RVKCMP\SETUP\G10_R_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G10 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G10_R_PGRANT.OUT
|
||||
\PUBLIC\REVOKE R FOR F:\RVKTEST\G10 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G10_R.OUT
|
||||
|
||||
ECHO === D10 revoke W M from directory === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\REVOKE W M FOR F:\RVKTEST\ONE FROM USER MARIO > F:\RVKCMP\OUT\D10_DIR_REVOKE_WM.OUT
|
||||
ECHO Starting G11_W directory revoke W...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G11 > F:\RVKCMP\SETUP\G11_W_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G11 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G11_W_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE W FOR F:\RVKTEST\G11 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G11_W.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G11 > F:\RVKCMP\SETUP\G11_W_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G11 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G11_W_PGRANT.OUT
|
||||
\PUBLIC\REVOKE W FOR F:\RVKTEST\G11 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G11_W.OUT
|
||||
|
||||
ECHO === D11 revoke ALL from directory / remove trustee === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\REVOKE ALL FOR F:\RVKTEST\ONE FROM USER MARIO > F:\RVKCMP\OUT\D11_DIR_REVOKE_ALL.OUT
|
||||
ECHO Starting G12_C directory revoke C...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G12 > F:\RVKCMP\SETUP\G12_C_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G12 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G12_C_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE C FOR F:\RVKTEST\G12 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G12_C.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G12 > F:\RVKCMP\SETUP\G12_C_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G12 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G12_C_PGRANT.OUT
|
||||
\PUBLIC\REVOKE C FOR F:\RVKTEST\G12 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G12_C.OUT
|
||||
|
||||
ECHO === D20 revoke C E recursively from direct subdirectory trustees === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\REVOKE C E FOR F:\RVKTEST\SUBTST FROM USER MARIO /SUBDIRECTORIES > F:\RVKCMP\OUT\D20_SUBDIRS_REVOKE_CE.OUT
|
||||
ECHO Starting G13_E directory revoke E...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G13 > F:\RVKCMP\SETUP\G13_E_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G13 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G13_E_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE E FOR F:\RVKTEST\G13 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G13_E.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G13 > F:\RVKCMP\SETUP\G13_E_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G13 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G13_E_PGRANT.OUT
|
||||
\PUBLIC\REVOKE E FOR F:\RVKTEST\G13 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G13_E.OUT
|
||||
|
||||
ECHO === D21 revoke R from one explicit file === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\FILES\A.TXT FROM USER MARIO /FILES > F:\RVKCMP\OUT\D21_FILE_REVOKE_R.OUT
|
||||
ECHO Starting G14_M directory revoke M...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G14 > F:\RVKCMP\SETUP\G14_M_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G14 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G14_M_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE M FOR F:\RVKTEST\G14 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G14_M.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G14 > F:\RVKCMP\SETUP\G14_M_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G14 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G14_M_PGRANT.OUT
|
||||
\PUBLIC\REVOKE M FOR F:\RVKTEST\G14 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G14_M.OUT
|
||||
|
||||
ECHO === D22 revoke W from files in a directory === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\REVOKE W FOR F:\RVKTEST\FILES FROM USER MARIO /FILES > F:\RVKCMP\OUT\D22_FILES_DIR_REVOKE_W.OUT
|
||||
ECHO Starting G15_F directory revoke F...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G15 > F:\RVKCMP\SETUP\G15_F_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G15 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G15_F_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE F FOR F:\RVKTEST\G15 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G15_F.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G15 > F:\RVKCMP\SETUP\G15_F_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G15 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G15_F_PGRANT.OUT
|
||||
\PUBLIC\REVOKE F FOR F:\RVKTEST\G15 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G15_F.OUT
|
||||
|
||||
ECHO === D30 relative path from F:\RVKTEST === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\ONE TO USER MARIO > F:\RVKCMP\SETUP\S30_ONE_REGRANT.OUT
|
||||
CD \RVKTEST
|
||||
\NPUBLIC\REVOKE W FOR ONE FROM USER MARIO > F:\RVKCMP\OUT\D30_REL_DIR_REVOKE_W.OUT
|
||||
ECHO Starting G16_A directory revoke A...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G16 > F:\RVKCMP\SETUP\G16_A_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G16 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G16_A_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE A FOR F:\RVKTEST\G16 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G16_A.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G16 > F:\RVKCMP\SETUP\G16_A_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G16 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G16_A_PGRANT.OUT
|
||||
\PUBLIC\REVOKE A FOR F:\RVKTEST\G16 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G16_A.OUT
|
||||
|
||||
ECHO Starting G17_S directory revoke S...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G17 > F:\RVKCMP\SETUP\G17_S_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G17 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G17_S_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE S FOR F:\RVKTEST\G17 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G17_S.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G17 > F:\RVKCMP\SETUP\G17_S_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G17 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G17_S_PGRANT.OUT
|
||||
\PUBLIC\REVOKE S FOR F:\RVKTEST\G17 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G17_S.OUT
|
||||
|
||||
ECHO Starting G20_RF directory revoke R F...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G20 > F:\RVKCMP\SETUP\G20_RF_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G20 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G20_RF_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE R F FOR F:\RVKTEST\G20 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G20_RF.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G20 > F:\RVKCMP\SETUP\G20_RF_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G20 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G20_RF_PGRANT.OUT
|
||||
\PUBLIC\REVOKE R F FOR F:\RVKTEST\G20 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G20_RF.OUT
|
||||
|
||||
ECHO Starting G21_RW directory revoke R W...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G21 > F:\RVKCMP\SETUP\G21_RW_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G21 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G21_RW_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE R W FOR F:\RVKTEST\G21 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G21_RW.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G21 > F:\RVKCMP\SETUP\G21_RW_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G21 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G21_RW_PGRANT.OUT
|
||||
\PUBLIC\REVOKE R W FOR F:\RVKTEST\G21 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G21_RW.OUT
|
||||
|
||||
ECHO Starting G22_RWC directory revoke R W C...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G22 > F:\RVKCMP\SETUP\G22_RWC_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G22 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G22_RWC_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE R W C FOR F:\RVKTEST\G22 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G22_RWC.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G22 > F:\RVKCMP\SETUP\G22_RWC_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G22 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G22_RWC_PGRANT.OUT
|
||||
\PUBLIC\REVOKE R W C FOR F:\RVKTEST\G22 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G22_RWC.OUT
|
||||
|
||||
ECHO Starting G23_RWCE directory revoke R W C E...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G23 > F:\RVKCMP\SETUP\G23_RWCE_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G23 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G23_RWCE_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE R W C E FOR F:\RVKTEST\G23 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G23_RWCE.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G23 > F:\RVKCMP\SETUP\G23_RWCE_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G23 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G23_RWCE_PGRANT.OUT
|
||||
\PUBLIC\REVOKE R W C E FOR F:\RVKTEST\G23 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G23_RWCE.OUT
|
||||
|
||||
ECHO Starting G24_EMF directory revoke E M F...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G24 > F:\RVKCMP\SETUP\G24_EMF_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G24 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G24_EMF_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE E M F FOR F:\RVKTEST\G24 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G24_EMF.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G24 > F:\RVKCMP\SETUP\G24_EMF_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G24 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G24_EMF_PGRANT.OUT
|
||||
\PUBLIC\REVOKE E M F FOR F:\RVKTEST\G24 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G24_EMF.OUT
|
||||
|
||||
ECHO Starting G25_SAL directory revoke S A...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G25 > F:\RVKCMP\SETUP\G25_SAL_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G25 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G25_SAL_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE S A FOR F:\RVKTEST\G25 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G25_SAL.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G25 > F:\RVKCMP\SETUP\G25_SAL_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G25 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G25_SAL_PGRANT.OUT
|
||||
\PUBLIC\REVOKE S A FOR F:\RVKTEST\G25 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G25_SAL.OUT
|
||||
|
||||
ECHO Starting G26_ALL directory revoke ALL...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G26 > F:\RVKCMP\SETUP\G26_ALL_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G26 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G26_ALL_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE ALL FOR F:\RVKTEST\G26 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G26_ALL.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G26 > F:\RVKCMP\SETUP\G26_ALL_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G26 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G26_ALL_PGRANT.OUT
|
||||
\PUBLIC\REVOKE ALL FOR F:\RVKTEST\G26 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G26_ALL.OUT
|
||||
|
||||
ECHO Starting G30_RE directory revoke R E...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G30 > F:\RVKCMP\SETUP\G30_RE_NREM.OUT
|
||||
\NPUBLIC\GRANT R E FOR F:\RVKTEST\G30 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G30_RE_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\G30 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G30_RE.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G30 > F:\RVKCMP\SETUP\G30_RE_PREM.OUT
|
||||
\NPUBLIC\GRANT R E FOR F:\RVKTEST\G30 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G30_RE_PGRANT.OUT
|
||||
\PUBLIC\REVOKE R FOR F:\RVKTEST\G30 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G30_RE.OUT
|
||||
|
||||
ECHO Starting G31_RWF directory revoke W from R W F...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G31 > F:\RVKCMP\SETUP\G31_RWF_NREM.OUT
|
||||
\NPUBLIC\GRANT R W F FOR F:\RVKTEST\G31 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G31_RWF_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE W FOR F:\RVKTEST\G31 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G31_RWF.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G31 > F:\RVKCMP\SETUP\G31_RWF_PREM.OUT
|
||||
\NPUBLIC\GRANT R W F FOR F:\RVKTEST\G31 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G31_RWF_PGRANT.OUT
|
||||
\PUBLIC\REVOKE W FOR F:\RVKTEST\G31 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G31_RWF.OUT
|
||||
|
||||
ECHO Starting G32_RCM directory revoke C from R C M...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G32 > F:\RVKCMP\SETUP\G32_RCM_NREM.OUT
|
||||
\NPUBLIC\GRANT R C M FOR F:\RVKTEST\G32 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G32_RCM_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE C FOR F:\RVKTEST\G32 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G32_RCM.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G32 > F:\RVKCMP\SETUP\G32_RCM_PREM.OUT
|
||||
\NPUBLIC\GRANT R C M FOR F:\RVKTEST\G32 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G32_RCM_PGRANT.OUT
|
||||
\PUBLIC\REVOKE C FOR F:\RVKTEST\G32 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G32_RCM.OUT
|
||||
|
||||
ECHO Starting G33_RFA directory revoke F A from R F A...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G33 > F:\RVKCMP\SETUP\G33_RFA_NREM.OUT
|
||||
\NPUBLIC\GRANT R F A FOR F:\RVKTEST\G33 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G33_RFA_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE F A FOR F:\RVKTEST\G33 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G33_RFA.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G33 > F:\RVKCMP\SETUP\G33_RFA_PREM.OUT
|
||||
\NPUBLIC\GRANT R F A FOR F:\RVKTEST\G33 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G33_RFA_PGRANT.OUT
|
||||
\PUBLIC\REVOKE F A FOR F:\RVKTEST\G33 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G33_RFA.OUT
|
||||
|
||||
ECHO Starting G34_WCM directory revoke W C from W C M...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G34 > F:\RVKCMP\SETUP\G34_WCM_NREM.OUT
|
||||
\NPUBLIC\GRANT W C M FOR F:\RVKTEST\G34 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G34_WCM_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE W C FOR F:\RVKTEST\G34 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G34_WCM.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G34 > F:\RVKCMP\SETUP\G34_WCM_PREM.OUT
|
||||
\NPUBLIC\GRANT W C M FOR F:\RVKTEST\G34 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G34_WCM_PGRANT.OUT
|
||||
\PUBLIC\REVOKE W C FOR F:\RVKTEST\G34 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G34_WCM.OUT
|
||||
|
||||
ECHO Starting G35_EMF directory revoke E M from E M F...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G35 > F:\RVKCMP\SETUP\G35_EMF_NREM.OUT
|
||||
\NPUBLIC\GRANT E M F FOR F:\RVKTEST\G35 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G35_EMF_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE E M FOR F:\RVKTEST\G35 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G35_EMF.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G35 > F:\RVKCMP\SETUP\G35_EMF_PREM.OUT
|
||||
\NPUBLIC\GRANT E M F FOR F:\RVKTEST\G35 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G35_EMF_PGRANT.OUT
|
||||
\PUBLIC\REVOKE E M FOR F:\RVKTEST\G35 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G35_EMF.OUT
|
||||
|
||||
ECHO Starting G36_RMF directory revoke M from R M F...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G36 > F:\RVKCMP\SETUP\G36_RMF_NREM.OUT
|
||||
\NPUBLIC\GRANT R M F FOR F:\RVKTEST\G36 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G36_RMF_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE M FOR F:\RVKTEST\G36 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G36_RMF.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G36 > F:\RVKCMP\SETUP\G36_RMF_PREM.OUT
|
||||
\NPUBLIC\GRANT R M F FOR F:\RVKTEST\G36 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G36_RMF_PGRANT.OUT
|
||||
\PUBLIC\REVOKE M FOR F:\RVKTEST\G36 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G36_RMF.OUT
|
||||
|
||||
ECHO Starting G37_REMA directory revoke R E M A...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G37 > F:\RVKCMP\SETUP\G37_REMA_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G37 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G37_REMA_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE R E M A FOR F:\RVKTEST\G37 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G37_REMA.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G37 > F:\RVKCMP\SETUP\G37_REMA_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G37 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G37_REMA_PGRANT.OUT
|
||||
\PUBLIC\REVOKE R E M A FOR F:\RVKTEST\G37 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G37_REMA.OUT
|
||||
|
||||
ECHO Starting G38_SR directory revoke S R...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G38 > F:\RVKCMP\SETUP\G38_SR_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G38 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G38_SR_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE S R FOR F:\RVKTEST\G38 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G38_SR.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G38 > F:\RVKCMP\SETUP\G38_SR_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G38 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G38_SR_PGRANT.OUT
|
||||
\PUBLIC\REVOKE S R FOR F:\RVKTEST\G38 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G38_SR.OUT
|
||||
|
||||
ECHO Starting G39_SRF directory revoke S R F...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G39 > F:\RVKCMP\SETUP\G39_SRF_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G39 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G39_SRF_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE S R F FOR F:\RVKTEST\G39 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G39_SRF.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G39 > F:\RVKCMP\SETUP\G39_SRF_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G39 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G39_SRF_PGRANT.OUT
|
||||
\PUBLIC\REVOKE S R F FOR F:\RVKTEST\G39 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G39_SRF.OUT
|
||||
|
||||
ECHO Starting G40_SWCM directory revoke S W C M...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G40 > F:\RVKCMP\SETUP\G40_SWCM_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G40 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G40_SWCM_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE S W C M FOR F:\RVKTEST\G40 FROM USER NOPASSUSER > F:\RVKCMP\OUT\G40_SWCM.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\G40 > F:\RVKCMP\SETUP\G40_SWCM_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\G40 TO USER NOPASSUSER > F:\RVKCMP\SETUP\G40_SWCM_PGRANT.OUT
|
||||
\PUBLIC\REVOKE S W C M FOR F:\RVKTEST\G40 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\G40_SWCM.OUT
|
||||
|
||||
ECHO Starting F10_R file revoke R...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F10\T.TXT /FILES > F:\RVKCMP\SETUP\F10_R_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\F10\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F10_R_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\F10\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\OUT\F10_R.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F10\T.TXT /FILES > F:\RVKCMP\SETUP\F10_R_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\F10\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F10_R_PGRANT.OUT
|
||||
\PUBLIC\REVOKE R FOR F:\RVKTEST\F10\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\PUBOUT\F10_R.OUT
|
||||
|
||||
ECHO Starting F11_RF file revoke R F...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F11\T.TXT /FILES > F:\RVKCMP\SETUP\F11_RF_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\F11\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F11_RF_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE R F FOR F:\RVKTEST\F11\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\OUT\F11_RF.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F11\T.TXT /FILES > F:\RVKCMP\SETUP\F11_RF_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\F11\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F11_RF_PGRANT.OUT
|
||||
\PUBLIC\REVOKE R F FOR F:\RVKTEST\F11\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\PUBOUT\F11_RF.OUT
|
||||
|
||||
ECHO Starting F12_RAL file revoke R A...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F12\T.TXT /FILES > F:\RVKCMP\SETUP\F12_RAL_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\F12\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F12_RAL_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE R A FOR F:\RVKTEST\F12\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\OUT\F12_RAL.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F12\T.TXT /FILES > F:\RVKCMP\SETUP\F12_RAL_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\F12\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F12_RAL_PGRANT.OUT
|
||||
\PUBLIC\REVOKE R A FOR F:\RVKTEST\F12\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\PUBOUT\F12_RAL.OUT
|
||||
|
||||
ECHO Starting F13_ALL file revoke ALL...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F13\T.TXT /FILES > F:\RVKCMP\SETUP\F13_ALL_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\F13\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F13_ALL_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE ALL FOR F:\RVKTEST\F13\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\OUT\F13_ALL.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F13\T.TXT /FILES > F:\RVKCMP\SETUP\F13_ALL_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\F13\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F13_ALL_PGRANT.OUT
|
||||
\PUBLIC\REVOKE ALL FOR F:\RVKTEST\F13\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\PUBOUT\F13_ALL.OUT
|
||||
|
||||
ECHO Starting F14_N file revoke W from R W...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F14\T.TXT /FILES > F:\RVKCMP\SETUP\F14_N_NREM.OUT
|
||||
\NPUBLIC\GRANT R W FOR F:\RVKTEST\F14\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F14_N_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE W FOR F:\RVKTEST\F14\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\OUT\F14_N.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F14\T.TXT /FILES > F:\RVKCMP\SETUP\F14_N_PREM.OUT
|
||||
\NPUBLIC\GRANT R W FOR F:\RVKTEST\F14\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F14_N_PGRANT.OUT
|
||||
\PUBLIC\REVOKE W FOR F:\RVKTEST\F14\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\PUBOUT\F14_N.OUT
|
||||
|
||||
ECHO Starting F15_S file revoke S...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F15\T.TXT /FILES > F:\RVKCMP\SETUP\F15_S_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\F15\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F15_S_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE S FOR F:\RVKTEST\F15\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\OUT\F15_S.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F15\T.TXT /FILES > F:\RVKCMP\SETUP\F15_S_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\F15\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F15_S_PGRANT.OUT
|
||||
\PUBLIC\REVOKE S FOR F:\RVKTEST\F15\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\PUBOUT\F15_S.OUT
|
||||
|
||||
ECHO Starting F16_SAL file revoke S A...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F16\T.TXT /FILES > F:\RVKCMP\SETUP\F16_SAL_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\F16\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F16_SAL_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE S A FOR F:\RVKTEST\F16\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\OUT\F16_SAL.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\F16\T.TXT /FILES > F:\RVKCMP\SETUP\F16_SAL_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\F16\T.TXT TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\F16_SAL_PGRANT.OUT
|
||||
\PUBLIC\REVOKE S A FOR F:\RVKTEST\F16\T.TXT FROM USER NOPASSUSER /FILES > F:\RVKCMP\PUBOUT\F16_SAL.OUT
|
||||
|
||||
ECHO Starting S10_R subdirectory revoke R...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\S10 /SUBDIRECTORIES > F:\RVKCMP\SETUP\S10_R_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\S10 TO USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\SETUP\S10_R_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\S10 FROM USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\OUT\S10_R.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\S10 /SUBDIRECTORIES > F:\RVKCMP\SETUP\S10_R_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\S10 TO USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\SETUP\S10_R_PGRANT.OUT
|
||||
\PUBLIC\REVOKE R FOR F:\RVKTEST\S10 FROM USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\PUBOUT\S10_R.OUT
|
||||
|
||||
ECHO Starting S11_RWC subdirectory revoke R W C...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\S11 /SUBDIRECTORIES > F:\RVKCMP\SETUP\S11_RWC_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\S11 TO USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\SETUP\S11_RWC_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE R W C FOR F:\RVKTEST\S11 FROM USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\OUT\S11_RWC.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\S11 /SUBDIRECTORIES > F:\RVKCMP\SETUP\S11_RWC_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\S11 TO USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\SETUP\S11_RWC_PGRANT.OUT
|
||||
\PUBLIC\REVOKE R W C FOR F:\RVKTEST\S11 FROM USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\PUBOUT\S11_RWC.OUT
|
||||
|
||||
ECHO Starting S12_ALL subdirectory revoke ALL...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\S12 /SUBDIRECTORIES > F:\RVKCMP\SETUP\S12_ALL_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\S12 TO USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\SETUP\S12_ALL_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE ALL FOR F:\RVKTEST\S12 FROM USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\OUT\S12_ALL.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\S12 /SUBDIRECTORIES > F:\RVKCMP\SETUP\S12_ALL_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\S12 TO USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\SETUP\S12_ALL_PGRANT.OUT
|
||||
\PUBLIC\REVOKE ALL FOR F:\RVKTEST\S12 FROM USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\PUBOUT\S12_ALL.OUT
|
||||
|
||||
ECHO Starting S13_SAL subdirectory revoke S A...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\S13 /SUBDIRECTORIES > F:\RVKCMP\SETUP\S13_SAL_NREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\S13 TO USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\SETUP\S13_SAL_NGRANT.OUT
|
||||
\NPUBLIC\REVOKE S A FOR F:\RVKTEST\S13 FROM USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\OUT\S13_SAL.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\S13 /SUBDIRECTORIES > F:\RVKCMP\SETUP\S13_SAL_PREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\S13 TO USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\SETUP\S13_SAL_PGRANT.OUT
|
||||
\PUBLIC\REVOKE S A FOR F:\RVKTEST\S13 FROM USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\PUBOUT\S13_SAL.OUT
|
||||
|
||||
ECHO Starting E90_NOTR no trustee...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\EMPTY > F:\RVKCMP\SETUP\E90_NREM.OUT
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\EMPTY FROM USER NOPASSUSER > F:\RVKCMP\OUT\E90_NOTR.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\EMPTY > F:\RVKCMP\SETUP\E90_PREM.OUT
|
||||
\PUBLIC\REVOKE R FOR F:\RVKTEST\EMPTY FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\E90_NOTR.OUT
|
||||
ECHO Starting E91_MUSR missing user...
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\G10 FROM USER NO_SUCH_USER > F:\RVKCMP\OUT\E91_MUSR.OUT
|
||||
\PUBLIC\REVOKE R FOR F:\RVKTEST\G10 FROM USER NO_SUCH_USER > F:\RVKCMP\PUBOUT\E91_MUSR.OUT
|
||||
ECHO Starting E92_MISD missing path...
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\MISSING\NOFILE.TXT FROM USER NOPASSUSER > F:\RVKCMP\OUT\E92_MISD.OUT
|
||||
\PUBLIC\REVOKE R FOR F:\RVKTEST\MISSING\NOFILE.TXT FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\E92_MISD.OUT
|
||||
ECHO Starting E93_BADD invalid right...
|
||||
\NPUBLIC\REVOKE BADRIGHT FOR F:\RVKTEST\G10 FROM USER NOPASSUSER > F:\RVKCMP\OUT\E93_BADD.OUT
|
||||
\PUBLIC\REVOKE BADRIGHT FOR F:\RVKTEST\G10 FROM USER NOPASSUSER > F:\RVKCMP\PUBOUT\E93_BADD.OUT
|
||||
ECHO Starting E94_BOTH /FILES and /SUBDIRECTORIES...
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\OPTBOTH /FILES > F:\RVKCMP\SETUP\E94_NFREM.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\OPTBOTH /SUBDIRECTORIES > F:\RVKCMP\SETUP\E94_NSREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\OPTBOTH TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\E94_NFGRANT.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\OPTBOTH TO USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\SETUP\E94_NSGRANT.OUT
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\OPTBOTH FROM USER NOPASSUSER /FILES /SUBDIRECTORIES > F:\RVKCMP\OUT\E94_BOTH.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\OPTBOTH /FILES > F:\RVKCMP\SETUP\E94_PFREM.OUT
|
||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RVKTEST\OPTBOTH /SUBDIRECTORIES > F:\RVKCMP\SETUP\E94_PSREM.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\OPTBOTH TO USER NOPASSUSER /FILES > F:\RVKCMP\SETUP\E94_PFGRANT.OUT
|
||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RVKTEST\OPTBOTH TO USER NOPASSUSER /SUBDIRECTORIES > F:\RVKCMP\SETUP\E94_PSGRANT.OUT
|
||||
\PUBLIC\REVOKE R FOR F:\RVKTEST\OPTBOTH FROM USER NOPASSUSER /FILES /SUBDIRECTORIES > F:\RVKCMP\PUBOUT\E94_BOTH.OUT
|
||||
ECHO Starting E95_GRAM bad grammar...
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\G10 USER NOPASSUSER > F:\RVKCMP\OUT\E95_GRAM.OUT
|
||||
\PUBLIC\REVOKE R FOR F:\RVKTEST\G10 USER NOPASSUSER > F:\RVKCMP\PUBOUT\E95_GRAM.OUT
|
||||
|
||||
ECHO === COMPARE NOVELL OUT AGAINST PUBLIC OUT === > F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing D01_HELP >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\D01_HELP.OUT F:\RVKCMP\PUBOUT\D01_HELP.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing D02_NOAR >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\D02_NOAR.OUT F:\RVKCMP\PUBOUT\D02_NOAR.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G10_R >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G10_R.OUT F:\RVKCMP\PUBOUT\G10_R.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G11_W >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G11_W.OUT F:\RVKCMP\PUBOUT\G11_W.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G12_C >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G12_C.OUT F:\RVKCMP\PUBOUT\G12_C.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G13_E >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G13_E.OUT F:\RVKCMP\PUBOUT\G13_E.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G14_M >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G14_M.OUT F:\RVKCMP\PUBOUT\G14_M.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G15_F >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G15_F.OUT F:\RVKCMP\PUBOUT\G15_F.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G16_A >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G16_A.OUT F:\RVKCMP\PUBOUT\G16_A.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G17_S >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G17_S.OUT F:\RVKCMP\PUBOUT\G17_S.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G20_RF >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G20_RF.OUT F:\RVKCMP\PUBOUT\G20_RF.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G21_RW >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G21_RW.OUT F:\RVKCMP\PUBOUT\G21_RW.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G22_RWC >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G22_RWC.OUT F:\RVKCMP\PUBOUT\G22_RWC.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G23_RWCE >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G23_RWCE.OUT F:\RVKCMP\PUBOUT\G23_RWCE.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G24_EMF >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G24_EMF.OUT F:\RVKCMP\PUBOUT\G24_EMF.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G25_SAL >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G25_SAL.OUT F:\RVKCMP\PUBOUT\G25_SAL.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G26_ALL >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G26_ALL.OUT F:\RVKCMP\PUBOUT\G26_ALL.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G30_RE >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G30_RE.OUT F:\RVKCMP\PUBOUT\G30_RE.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G31_RWF >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G31_RWF.OUT F:\RVKCMP\PUBOUT\G31_RWF.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G32_RCM >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G32_RCM.OUT F:\RVKCMP\PUBOUT\G32_RCM.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G33_RFA >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G33_RFA.OUT F:\RVKCMP\PUBOUT\G33_RFA.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G34_WCM >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G34_WCM.OUT F:\RVKCMP\PUBOUT\G34_WCM.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G35_EMF >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G35_EMF.OUT F:\RVKCMP\PUBOUT\G35_EMF.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G36_RMF >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G36_RMF.OUT F:\RVKCMP\PUBOUT\G36_RMF.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G37_REMA >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G37_REMA.OUT F:\RVKCMP\PUBOUT\G37_REMA.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G38_SR >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G38_SR.OUT F:\RVKCMP\PUBOUT\G38_SR.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G39_SRF >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G39_SRF.OUT F:\RVKCMP\PUBOUT\G39_SRF.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing G40_SWCM >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\G40_SWCM.OUT F:\RVKCMP\PUBOUT\G40_SWCM.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing F10_R >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\F10_R.OUT F:\RVKCMP\PUBOUT\F10_R.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing F11_RF >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\F11_RF.OUT F:\RVKCMP\PUBOUT\F11_RF.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing F12_RAL >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\F12_RAL.OUT F:\RVKCMP\PUBOUT\F12_RAL.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing F13_ALL >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\F13_ALL.OUT F:\RVKCMP\PUBOUT\F13_ALL.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing F14_N >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\F14_N.OUT F:\RVKCMP\PUBOUT\F14_N.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing F15_S >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\F15_S.OUT F:\RVKCMP\PUBOUT\F15_S.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing F16_SAL >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\F16_SAL.OUT F:\RVKCMP\PUBOUT\F16_SAL.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing S10_R >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\S10_R.OUT F:\RVKCMP\PUBOUT\S10_R.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing S11_RWC >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\S11_RWC.OUT F:\RVKCMP\PUBOUT\S11_RWC.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing S12_ALL >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\S12_ALL.OUT F:\RVKCMP\PUBOUT\S12_ALL.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing S13_SAL >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\S13_SAL.OUT F:\RVKCMP\PUBOUT\S13_SAL.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing E90_NOTR >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\E90_NOTR.OUT F:\RVKCMP\PUBOUT\E90_NOTR.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing E91_MUSR >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\E91_MUSR.OUT F:\RVKCMP\PUBOUT\E91_MUSR.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing E92_MISD >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\E92_MISD.OUT F:\RVKCMP\PUBOUT\E92_MISD.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing E93_BADD >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\E93_BADD.OUT F:\RVKCMP\PUBOUT\E93_BADD.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing E94_BOTH >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\E94_BOTH.OUT F:\RVKCMP\PUBOUT\E94_BOTH.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
ECHO Comparing E95_GRAM >> F:\RVKCMP\COMPARE.LOG
|
||||
FC F:\RVKCMP\OUT\E95_GRAM.OUT F:\RVKCMP\PUBOUT\E95_GRAM.OUT >> F:\RVKCMP\COMPARE.LOG
|
||||
|
||||
REM --- Queue user-context RIGHTS readback helper. ---
|
||||
IF "%LGNTPWD%"=="" GOTO NEEDPWD
|
||||
IF EXIST \PUBLIC\DLYSTRT.EXE COPY \PUBLIC\DLYSTRT.EXE C:\RVKTMP > NUL
|
||||
IF EXIST C:\RVKTMP\DLYSTRT.EXE GOTO HAVEDLY
|
||||
ECHO ERROR: DLYSTRT.EXE not found. >> F:\RVKCMP\RUN.LOG
|
||||
ECHO ERROR: DLYSTRT.EXE not found.
|
||||
GOTO END
|
||||
|
||||
:HAVEDLY
|
||||
COPY F:\RVKSTA.BAT C:\RVKTMP > NUL
|
||||
COPY F:\RVKC.BAT C:\RVKTMP > NUL
|
||||
C:
|
||||
CD \RVKTMP
|
||||
DLYSTRT /T:2 RVKC.BAT
|
||||
ECHO RVKC queued via DLYSTRT. >> F:\RVKCMP\RUN.LOG
|
||||
ECHO RVKC wurde via DLYSTRT gestartet.
|
||||
ECHO Nach automatischem Re-Login wird RVKSTA PART2 gestartet.
|
||||
GOTO END
|
||||
|
||||
:PART2
|
||||
F:
|
||||
CD \
|
||||
IF NOT EXIST RVKCMP\UNOV MD RVKCMP\UNOV
|
||||
IF NOT EXIST RVKCMP\UPUB MD RVKCMP\UPUB
|
||||
IF EXIST C:\RVKTMP\UNOV\*.* COPY C:\RVKTMP\UNOV\*.* F:\RVKCMP\UNOV > NUL
|
||||
IF EXIST C:\RVKTMP\UPUB\*.* COPY C:\RVKTMP\UPUB\*.* F:\RVKCMP\UPUB > NUL
|
||||
IF EXIST C:\RVKTMP\HELPER.TXT COPY C:\RVKTMP\HELPER.TXT F:\RVKCMP\HELPER.TXT > NUL
|
||||
IF EXIST C:\RVKTMP\ULOG1.OUT COPY C:\RVKTMP\ULOG1.OUT F:\RVKCMP\ULOG1.OUT > NUL
|
||||
IF EXIST C:\RVKTMP\ULOGIN.OUT COPY C:\RVKTMP\ULOGIN.OUT F:\RVKCMP\ULOGIN.OUT > NUL
|
||||
IF EXIST C:\RVKTMP\ULOG2.OUT COPY C:\RVKTMP\ULOG2.OUT F:\RVKCMP\ULOG2.OUT > NUL
|
||||
IF EXIST C:\RVKTMP\ULGSUP.OUT COPY C:\RVKTMP\ULGSUP.OUT F:\RVKCMP\ULGSUP.OUT > NUL
|
||||
|
||||
ECHO === D90 no trustee on directory === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\EMPTY FROM USER MARIO > F:\RVKCMP\OUT\D90_NO_TRUSTEE.OUT
|
||||
|
||||
ECHO === D91 missing user === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\ONE FROM USER NO_SUCH_USER > F:\RVKCMP\OUT\D91_MISSING_USER.OUT
|
||||
|
||||
ECHO === D92 missing path === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\MISSING\NOFILE.TXT FROM USER MARIO > F:\RVKCMP\OUT\D92_MISSING_PATH.OUT
|
||||
|
||||
ECHO === D93 both /FILES and /SUBDIRECTORIES === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\OPTBOTH FROM USER MARIO /FILES /SUBDIRECTORIES > F:\RVKCMP\OUT\D93_FILES_AND_SUBDIRS.OUT
|
||||
|
||||
ECHO === D94 bad grammar / missing FROM === >> F:\RVKCMP\RUN.LOG
|
||||
\NPUBLIC\REVOKE R FOR F:\RVKTEST\ONE USER MARIO > F:\RVKCMP\OUT\D94_BAD_GRAMMAR.OUT
|
||||
ECHO === COMPARE NOPASSUSER NOVELL RIGHTS AGAINST PUBLIC RIGHTS === > F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G10_R >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G10_R.OUT F:\RVKCMP\UPUB\G10_R.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G11_W >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G11_W.OUT F:\RVKCMP\UPUB\G11_W.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G12_C >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G12_C.OUT F:\RVKCMP\UPUB\G12_C.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G13_E >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G13_E.OUT F:\RVKCMP\UPUB\G13_E.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G14_M >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G14_M.OUT F:\RVKCMP\UPUB\G14_M.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G15_F >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G15_F.OUT F:\RVKCMP\UPUB\G15_F.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G16_A >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G16_A.OUT F:\RVKCMP\UPUB\G16_A.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G17_S >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G17_S.OUT F:\RVKCMP\UPUB\G17_S.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G20_RF >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G20_RF.OUT F:\RVKCMP\UPUB\G20_RF.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G21_RW >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G21_RW.OUT F:\RVKCMP\UPUB\G21_RW.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G22_RWC >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G22_RWC.OUT F:\RVKCMP\UPUB\G22_RWC.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G23_RWCE >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G23_RWCE.OUT F:\RVKCMP\UPUB\G23_RWCE.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G24_EMF >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G24_EMF.OUT F:\RVKCMP\UPUB\G24_EMF.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G25_SAL >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G25_SAL.OUT F:\RVKCMP\UPUB\G25_SAL.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G26_ALL >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G26_ALL.OUT F:\RVKCMP\UPUB\G26_ALL.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G30_RE >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G30_RE.OUT F:\RVKCMP\UPUB\G30_RE.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G31_RWF >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G31_RWF.OUT F:\RVKCMP\UPUB\G31_RWF.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G32_RCM >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G32_RCM.OUT F:\RVKCMP\UPUB\G32_RCM.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G33_RFA >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G33_RFA.OUT F:\RVKCMP\UPUB\G33_RFA.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G34_WCM >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G34_WCM.OUT F:\RVKCMP\UPUB\G34_WCM.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G35_EMF >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G35_EMF.OUT F:\RVKCMP\UPUB\G35_EMF.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G36_RMF >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G36_RMF.OUT F:\RVKCMP\UPUB\G36_RMF.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G37_REMA >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G37_REMA.OUT F:\RVKCMP\UPUB\G37_REMA.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G38_SR >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G38_SR.OUT F:\RVKCMP\UPUB\G38_SR.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G39_SRF >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G39_SRF.OUT F:\RVKCMP\UPUB\G39_SRF.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing G40_SWCM >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\G40_SWCM.OUT F:\RVKCMP\UPUB\G40_SWCM.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing F10_R >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\F10_R.OUT F:\RVKCMP\UPUB\F10_R.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing F11_RF >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\F11_RF.OUT F:\RVKCMP\UPUB\F11_RF.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing F12_RAL >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\F12_RAL.OUT F:\RVKCMP\UPUB\F12_RAL.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing F13_ALL >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\F13_ALL.OUT F:\RVKCMP\UPUB\F13_ALL.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing F14_N >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\F14_N.OUT F:\RVKCMP\UPUB\F14_N.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing F15_S >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\F15_S.OUT F:\RVKCMP\UPUB\F15_S.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing F16_SAL >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\F16_SAL.OUT F:\RVKCMP\UPUB\F16_SAL.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing S10_R >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\S10_R.OUT F:\RVKCMP\UPUB\S10_R.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing S11_RWC >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\S11_RWC.OUT F:\RVKCMP\UPUB\S11_RWC.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing S12_ALL >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\S12_ALL.OUT F:\RVKCMP\UPUB\S12_ALL.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
ECHO Comparing S13_SAL >> F:\RVKCMP\UCOMP.LOG
|
||||
FC F:\RVKCMP\UNOV\S13_SAL.OUT F:\RVKCMP\UPUB\S13_SAL.OUT >> F:\RVKCMP\UCOMP.LOG
|
||||
|
||||
ECHO === SUMMARY === > F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO RVKSTA REVOKE baseline finished. >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO Expected: >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO - D10/D11 capture normal directory revoke and trustee removal. >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO - D20 captures /SUBDIRECTORIES behavior using direct trustees on child directories. >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO - D21/D22 capture /FILES behavior for explicit files and directory file sets. >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO - D30 captures relative path behavior with absolute \NPUBLIC\REVOKE invocation. >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO - D90-D94 capture no-trustee, missing-user, missing-path/Novell no-trustee behavior, option combination, and grammar errors. >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO RVKSTA REVOKE comparison finished. >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO Direct mode compares NPUBLIC REVOKE against PUBLIC REVOKE. >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO Matrix covers single rights, mixed rights, ALL removal, file mode, and subdirectory mode. >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO User-context mode logs in as NOPASSUSER and compares RIGHTS output after PUBLIC REVOKE. >> F:\RVKCMP\SUMMARY.TXT
|
||||
ECHO Optional: RVKZIP ausfuehren. >> F:\RVKCMP\SUMMARY.TXT
|
||||
|
||||
ECHO RVKSTA fertig.
|
||||
ECHO RVKSTA PART2 fertig.
|
||||
ECHO Ergebnisse liegen in F:\RVKCMP
|
||||
ECHO Optional: RVKZIP ausfuehren.
|
||||
GOTO END
|
||||
|
||||
:NEEDPWD
|
||||
ECHO ERROR: LGNTPWD ist nicht gesetzt.
|
||||
ECHO Fuer den automatischen REVOKE/NOPASSUSER-Test zuerst setzen, z.B.:
|
||||
ECHO SET LGNTPWD=dein-supervisor-passwort
|
||||
ECHO Danach starten:
|
||||
ECHO F:\RVKSTA
|
||||
ECHO Es wurde kein DLYSTRT installiert und kein User-Kontext-Test gestartet.
|
||||
|
||||
:END
|
||||
|
||||
@@ -10,13 +10,13 @@ IF EXIST RVKSTA.ZIP DEL RVKSTA.ZIP
|
||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
||||
|
||||
ECHO Creating RVKSTA.ZIP > ZIP.LOG
|
||||
ZIP -r RVKSTA.ZIP RUN.LOG SUMMARY.TXT SETUP OUT >> ZIP.LOG
|
||||
|
||||
ZIP -r RVKSTA.ZIP RUN.LOG SUMMARY.TXT COMPARE.LOG UCOMP.LOG HELPER.TXT ULOG1.OUT ULOGIN.OUT ULOG2.OUT ULGSUP.OUT OUT PUBOUT SETUP UNOV UPUB USETUP >> ZIP.LOG
|
||||
|
||||
REM Cleanup generated test directories after ZIP.
|
||||
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
|
||||
ECHO Cleaning generated test directories... >> ZIP.LOG
|
||||
IF EXIST \RVKTEST\NUL DELTREE /Y \RVKTEST >> ZIP.LOG
|
||||
IF EXIST C:\RVKTMP\NUL DELTREE /Y C:\RVKTMP >> ZIP.LOG
|
||||
CD \
|
||||
ECHO.
|
||||
ECHO ZIP step finished.
|
||||
|
||||
@@ -1,45 +1,47 @@
|
||||
# RGHTSTA - RIGHTS comparison test
|
||||
|
||||
`RGHTSTA.BAT` compares Novell `RIGHTS` with the current implementation.
|
||||
|
||||
Result directories:
|
||||
|
||||
```text
|
||||
F:\RGHTCMP\OUT Novell baseline using \NPUBLIC\RIGHTS
|
||||
F:\RGHTCMP\PUBOUT current implementation using \PUBLIC\RIGHTS
|
||||
F:\RGHTCMP\COMPARE.LOG
|
||||
```
|
||||
|
||||
The test keeps the original Novell-baseline behavior and adds the public-tool
|
||||
comparison layer.
|
||||
|
||||
Coverage:
|
||||
|
||||
- default/current directory from `F:\`
|
||||
- explicit directory and subdirectory paths
|
||||
- explicit file and nested file paths
|
||||
- default/current directory from inside the test directory
|
||||
- relative file and relative directory paths
|
||||
- missing directory/file paths
|
||||
- too-many-arguments and `/?` usage/help cases
|
||||
|
||||
operation. Its redirected output must be identical to the normal Novell output.
|
||||
That means:
|
||||
|
||||
```text
|
||||
OUT == PUBOUT
|
||||
```
|
||||
|
||||
Run:
|
||||
|
||||
```bat
|
||||
F:
|
||||
CD \
|
||||
RGHTSTA
|
||||
RGHTZIP
|
||||
```
|
||||
|
||||
The generated test tree is `F:\RGHTEST`. `RGHTZIP.BAT` packages the result and
|
||||
then removes `F:\RGHTEST` again so the SYS root stays clean.
|
||||
|
||||
Note: `RIGHTS` currently has no short-output comparison in this baseline test. That switch exists for NDIR-style output control and should only be added to RIGHTS later if the tool implements it explicitly.
|
||||
# RGHTSTA - RIGHTS comparison test
|
||||
|
||||
`RGHTSTA.BAT` compares Novell `RIGHTS` with the current implementation.
|
||||
|
||||
## Run
|
||||
|
||||
Run while logged in and with `F:` mapped to `SYS:`:
|
||||
|
||||
```bat
|
||||
F:
|
||||
CD \
|
||||
RGHTSTA
|
||||
RGHTZIP
|
||||
```
|
||||
|
||||
## Result layout
|
||||
|
||||
```text
|
||||
F:\RGHTCMP\OUT Novell baseline using \NPUBLIC\RIGHTS
|
||||
F:\RGHTCMP\PUBOUT current implementation using \PUBLIC\RIGHTS
|
||||
F:\RGHTCMP\COMPARE.LOG
|
||||
F:\RGHTCMP\RUN.LOG
|
||||
F:\RGHTCMP\SUMMARY.TXT
|
||||
```
|
||||
|
||||
`RGHTZIP.BAT` packages the result tree and removes the generated `F:\RGHTEST`
|
||||
test tree afterwards.
|
||||
|
||||
## Coverage
|
||||
|
||||
- default/current directory from `F:\`
|
||||
- explicit directory and subdirectory paths
|
||||
- explicit file and nested file paths
|
||||
- default/current directory from inside the test directory
|
||||
- relative file and relative directory paths
|
||||
- missing directory/file paths
|
||||
- too-many-arguments and `/?` usage/help cases
|
||||
|
||||
Expected comparison:
|
||||
|
||||
```text
|
||||
OUT == PUBOUT
|
||||
```
|
||||
|
||||
`RIGHTS` has no `/SHORT` comparison in this test. That switch belongs to the
|
||||
NDIR diagnostic output and should only be added to RIGHTS if the tool explicitly
|
||||
implements it later.
|
||||
|
||||
@@ -1,21 +1,106 @@
|
||||
# SLSTSTA - SLIST baseline test
|
||||
# SLSTSTA - SLIST logged-in/logged-out compare test
|
||||
|
||||
Novell-only baseline for `SLIST` behavior.
|
||||
`SLSTSTA.BAT` compares Novell `SLIST` with the current public implementation in
|
||||
both states in which SLIST is expected to work:
|
||||
|
||||
Runs `NPUBLIC\SLIST` with:
|
||||
1. **Logged in**: `\NPUBLIC\SLIST` vs `\PUBLIC\SLIST`.
|
||||
2. **Logged out**: `\NLOGIN\SLIST.EXE` vs `\LOGIN\SLIST.EXE`, copied to a local
|
||||
`C:\SLSTTMP` helper directory before logout.
|
||||
|
||||
- no argument
|
||||
- `MARS` as expected existing server
|
||||
- `NWBYGONE01` as expected missing-server/negative test
|
||||
- `/CONTINUE` variants
|
||||
- `/?` usage output
|
||||
SLIST is also installed in `SYS:LOGIN`, so the logged-out phase is important.
|
||||
After `LOGOUT`, the network drive `F:` is gone; therefore the helper runs from
|
||||
`C:\SLSTTMP` and only returns to `F:` after logging `SUPERVISOR` back in.
|
||||
|
||||
Results are written to `F:\SLSTCMP`. Optional packaging is done with `SLSTZIP.BAT`.
|
||||
## Run
|
||||
|
||||
`D99_HELP.OUT` is intentionally simulated with:
|
||||
Run while logged in as `SUPERVISOR` and with `F:` mapped to `SYS:`.
|
||||
|
||||
For the full logged-in and logged-out comparison:
|
||||
|
||||
```bat
|
||||
SET LGNTPWD=your-supervisor-password
|
||||
F:
|
||||
CD \
|
||||
SLSTSTA
|
||||
```
|
||||
|
||||
If `LGNTPWD` is not set, only the logged-in `NPUBLIC` vs `PUBLIC` comparison is
|
||||
run. The logged-out phase is skipped.
|
||||
|
||||
Package manually after the run:
|
||||
|
||||
```bat
|
||||
SLSTZIP
|
||||
```
|
||||
|
||||
Result ZIP:
|
||||
|
||||
```text
|
||||
F:\SLSTCMP\SLSTSTA.ZIP
|
||||
```
|
||||
|
||||
## Result layout
|
||||
|
||||
```text
|
||||
F:\SLSTCMP\OUT logged-in Novell baseline from \NPUBLIC\SLIST
|
||||
F:\SLSTCMP\PUBOUT logged-in PUBLIC output from \PUBLIC\SLIST
|
||||
F:\SLSTCMP\COMPARE.LOG
|
||||
|
||||
F:\SLSTCMP\LOUT logged-out Novell baseline from local NLOGIN copy
|
||||
F:\SLSTCMP\LPUBOUT logged-out LOGIN output from local LOGIN copy
|
||||
F:\SLSTCMP\LCOMP.LOG
|
||||
|
||||
F:\SLSTCMP\RUN.LOG
|
||||
F:\SLSTCMP\HELPER.TXT
|
||||
F:\SLSTCMP\SUMMARY.TXT
|
||||
```
|
||||
|
||||
## Logged-out helper flow
|
||||
|
||||
`SLSTSTA.BAT` copies the files required after logout to `C:\SLSTTMP`:
|
||||
|
||||
```text
|
||||
\NLOGIN\SLIST.EXE -> C:\SLSTTMP\NSLIST.EXE
|
||||
\LOGIN\SLIST.EXE -> C:\SLSTTMP\SLIST.EXE
|
||||
\NPUBLIC\LOGOUT.EXE
|
||||
\LOGIN\LOGIN.EXE
|
||||
\PUBLIC\DLYSTRT.EXE
|
||||
F:\SLSTC.BAT
|
||||
```
|
||||
|
||||
The public SLIST copy is intentionally named `SLIST.EXE`, not `PSLIST.EXE`,
|
||||
because the public DOS tools are a multi-call executable and dispatch by their
|
||||
own program name.
|
||||
|
||||
`SLSTC.BAT` then:
|
||||
|
||||
1. runs `LOGOUT`,
|
||||
2. runs both SLIST copies while no user is logged in,
|
||||
3. logs back in as `SUPERVISOR` using `LOGIN /PWD:%LGNTPWD%`,
|
||||
4. queues `F:\SLSTSTA.BAT PART2` through the local `DLYSTRT.EXE`.
|
||||
|
||||
## Coverage
|
||||
|
||||
Each phase captures the same matrix:
|
||||
|
||||
```text
|
||||
SLIST
|
||||
SLIST MARS
|
||||
SLIST NWBYGONE01
|
||||
SLIST /CONTINUE
|
||||
SLIST MARS /CONTINUE
|
||||
SLIST NWBYGONE01 /CONTINUE
|
||||
SLIST /?
|
||||
```
|
||||
|
||||
`MARS` is expected to exist. `NWBYGONE01` is expected to be missing.
|
||||
|
||||
`D99_HELP.OUT` for the Novell side is intentionally simulated with:
|
||||
|
||||
```text
|
||||
Usage: SLIST [Server] [/Continue]
|
||||
```
|
||||
|
||||
Reason: the Novell `SLIST /?` help text was observed on the console, but it does not reliably land in the redirected output file. Later, our implementation should run `SLIST /? > D99_HELP.OUT`, and this simulated Novell baseline gives us a stable file for comparison.
|
||||
The Novell `SLIST /?` text is visible on the console but does not always land in
|
||||
the redirected output file. The public implementation is redirected normally and
|
||||
must match this stable baseline.
|
||||
|
||||
73
test/slist/SLSTC.BAT
Normal file
73
test/slist/SLSTC.BAT
Normal file
@@ -0,0 +1,73 @@
|
||||
@ECHO OFF
|
||||
REM SLSTC.BAT
|
||||
REM Local helper for SLSTSTA.BAT logged-out SLIST comparison.
|
||||
REM Runs from C:\SLSTTMP. It logs out, runs SLIST without any logged-in
|
||||
REM user, logs SUPERVISOR back in, then queues F:\SLSTSTA.BAT PART2.
|
||||
|
||||
C:
|
||||
CD \SLSTTMP
|
||||
|
||||
ECHO SLSTC helper started. > C:\SLSTTMP\HELPER.TXT
|
||||
ECHO This helper logs out and runs SLIST while no user is logged in. >> C:\SLSTTMP\HELPER.TXT
|
||||
ECHO. >> C:\SLSTTMP\HELPER.TXT
|
||||
|
||||
IF NOT EXIST LOUT\NUL MD LOUT
|
||||
IF NOT EXIST LPUBOUT\NUL MD LPUBOUT
|
||||
|
||||
ECHO === L00 LOGOUT from initial session === >> C:\SLSTTMP\HELPER.TXT
|
||||
C:\SLSTTMP\LOGOUT.EXE > C:\SLSTTMP\L00_LOG.OUT
|
||||
|
||||
ECHO === LOGGED-OUT NOVELL BASELINE: NLOGIN\SLIST === >> C:\SLSTTMP\HELPER.TXT
|
||||
C:\SLSTTMP\NSLIST.EXE > C:\SLSTTMP\LOUT\D01_LIST.OUT
|
||||
C:\SLSTTMP\NSLIST.EXE MARS > C:\SLSTTMP\LOUT\D02_MARS_OK.OUT
|
||||
C:\SLSTTMP\NSLIST.EXE NWBYGONE01 > C:\SLSTTMP\LOUT\D03_NWBYGONE01_MISSING.OUT
|
||||
C:\SLSTTMP\NSLIST.EXE /CONTINUE > C:\SLSTTMP\LOUT\D04_CONT.OUT
|
||||
C:\SLSTTMP\NSLIST.EXE MARS /CONTINUE > C:\SLSTTMP\LOUT\D05_MARS_CONT_OK.OUT
|
||||
C:\SLSTTMP\NSLIST.EXE NWBYGONE01 /CONTINUE > C:\SLSTTMP\LOUT\D06_NWBYGONE01_CONT_MISSING.OUT
|
||||
ECHO Usage: SLIST [Server] [/Continue] > C:\SLSTTMP\LOUT\D99_HELP.OUT
|
||||
|
||||
ECHO === LOGGED-OUT PUBLIC IMPLEMENTATION: LOGIN\SLIST === >> C:\SLSTTMP\HELPER.TXT
|
||||
C:\SLSTTMP\SLIST.EXE > C:\SLSTTMP\LPUBOUT\D01_LIST.OUT
|
||||
C:\SLSTTMP\SLIST.EXE MARS > C:\SLSTTMP\LPUBOUT\D02_MARS_OK.OUT
|
||||
C:\SLSTTMP\SLIST.EXE NWBYGONE01 > C:\SLSTTMP\LPUBOUT\D03_NWBYGONE01_MISSING.OUT
|
||||
C:\SLSTTMP\SLIST.EXE /CONTINUE > C:\SLSTTMP\LPUBOUT\D04_CONT.OUT
|
||||
C:\SLSTTMP\SLIST.EXE MARS /CONTINUE > C:\SLSTTMP\LPUBOUT\D05_MARS_CONT_OK.OUT
|
||||
C:\SLSTTMP\SLIST.EXE NWBYGONE01 /CONTINUE > C:\SLSTTMP\LPUBOUT\D06_NWBYGONE01_CONT_MISSING.OUT
|
||||
C:\SLSTTMP\SLIST.EXE /? > C:\SLSTTMP\LPUBOUT\D99_HELP.OUT
|
||||
|
||||
IF "%LGNTPWD%"=="" GOTO MANUAL
|
||||
|
||||
ECHO === L99 LOGIN SUPERVISOR using local LOGIN === >> C:\SLSTTMP\HELPER.TXT
|
||||
C:\SLSTTMP\LOGIN.EXE SUPERVISOR /PWD:%LGNTPWD% > C:\SLSTTMP\L99_LGSUP.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST F:\SLSTSTA.BAT GOTO QUEUEP2
|
||||
ECHO F: not restored or F:\SLSTSTA.BAT missing after supervisor login. >> C:\SLSTTMP\HELPER.TXT
|
||||
ECHO.
|
||||
ECHO F: wurde nicht wiederhergestellt oder F:\SLSTSTA.BAT fehlt.
|
||||
ECHO Bitte manuell pruefen und dann ausfuehren:
|
||||
ECHO F:
|
||||
ECHO CD \
|
||||
ECHO SLSTSTA PART2
|
||||
GOTO END
|
||||
|
||||
:QUEUEP2
|
||||
ECHO F: is available. Queueing delayed SLSTSTA PART2. >> C:\SLSTTMP\HELPER.TXT
|
||||
C:
|
||||
CD \SLSTTMP
|
||||
C:\SLSTTMP\DLYSTRT.EXE /T:2 F:\SLSTSTA.BAT PART2 > C:\SLSTTMP\L98_P2.OUT
|
||||
ECHO SLSTC queued F:\SLSTSTA.BAT PART2. >> C:\SLSTTMP\HELPER.TXT
|
||||
ECHO.
|
||||
ECHO SLSTC fertig. PART2 wird per DLYSTRT gestartet.
|
||||
GOTO END
|
||||
|
||||
:MANUAL
|
||||
ECHO LGNTPWD is not set; automatic SUPERVISOR login skipped. >> C:\SLSTTMP\HELPER.TXT
|
||||
ECHO.
|
||||
ECHO SLSTC fertig. Jetzt manuell wieder als SUPERVISOR einloggen.
|
||||
ECHO Danach ausfuehren:
|
||||
ECHO F:\SLSTSTA PART2
|
||||
ECHO.
|
||||
|
||||
:END
|
||||
@@ -1,66 +1,233 @@
|
||||
@ECHO OFF
|
||||
REM SLSTSTA.BAT
|
||||
REM Automated SLIST test for MARS NWE.
|
||||
REM
|
||||
REM Uses NPUBLIC\SLIST as Novell baseline for currently implemented tool behavior.
|
||||
REM Servers:
|
||||
REM MARS expected to exist
|
||||
REM NWBYGONE01 expected negative/missing-server test
|
||||
REM
|
||||
REM Result tree:
|
||||
REM F:\SLSTCMP
|
||||
|
||||
F:
|
||||
CD \
|
||||
|
||||
REM --- Clean generated test/result directories (contents only). ---
|
||||
IF EXIST SLSTCMP\NUL DELTREE /Y SLSTCMP\*.*
|
||||
|
||||
IF NOT EXIST SLSTCMP\NUL MD SLSTCMP
|
||||
IF NOT EXIST SLSTCMP\OUT\NUL MD SLSTCMP\OUT
|
||||
|
||||
ECHO SLSTSTA SLIST test > F:\SLSTCMP\RUN.LOG
|
||||
ECHO Server MARS should exist. >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO Server NWBYGONE01 is expected to be missing. >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO. >> F:\SLSTCMP\RUN.LOG
|
||||
|
||||
ECHO === D01 default SLIST === >> F:\SLSTCMP\RUN.LOG
|
||||
NPUBLIC\SLIST > F:\SLSTCMP\OUT\D01_LIST.OUT
|
||||
|
||||
ECHO === D02 existing server MARS === >> F:\SLSTCMP\RUN.LOG
|
||||
NPUBLIC\SLIST MARS > F:\SLSTCMP\OUT\D02_MARS_OK.OUT
|
||||
|
||||
ECHO === D03 missing server NWBYGONE01 === >> F:\SLSTCMP\RUN.LOG
|
||||
NPUBLIC\SLIST NWBYGONE01 > F:\SLSTCMP\OUT\D03_NWBYGONE01_MISSING.OUT
|
||||
|
||||
ECHO === D04 default SLIST /CONTINUE === >> F:\SLSTCMP\RUN.LOG
|
||||
NPUBLIC\SLIST /CONTINUE > F:\SLSTCMP\OUT\D04_CONT.OUT
|
||||
|
||||
ECHO === D05 MARS /CONTINUE === >> F:\SLSTCMP\RUN.LOG
|
||||
NPUBLIC\SLIST MARS /CONTINUE > F:\SLSTCMP\OUT\D05_MARS_CONT_OK.OUT
|
||||
|
||||
ECHO === D06 NWBYGONE01 /CONTINUE === >> F:\SLSTCMP\RUN.LOG
|
||||
NPUBLIC\SLIST NWBYGONE01 /CONTINUE > F:\SLSTCMP\OUT\D06_NWBYGONE01_CONT_MISSING.OUT
|
||||
|
||||
ECHO === D99 usage/help simulated from Novell console output === >> F:\SLSTCMP\RUN.LOG
|
||||
REM Novell SLIST /? prints the usage on the console and does not reliably
|
||||
REM write it through stdout redirection. Keep the Novell baseline file
|
||||
REM filled with the observed console text, so our implementation can later
|
||||
REM be compared against its redirected SLIST /? output.
|
||||
ECHO Usage: SLIST [Server] [/Continue] > F:\SLSTCMP\OUT\D99_HELP.OUT
|
||||
|
||||
ECHO === SUMMARY === > F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO SLSTSTA SLIST baseline finished. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO Expected: >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO - D01 lists visible servers/services. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO - D02 finds or accepts MARS. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO - D03 is the negative test for missing NWBYGONE01. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO - D04/D05/D06 record /CONTINUE behavior. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO - D99 records usage syntax. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO Optional: SLSTZIP ausfuehren. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
|
||||
ECHO SLSTSTA fertig.
|
||||
ECHO Ergebnisse liegen in F:\SLSTCMP
|
||||
ECHO Optional: SLSTZIP ausfuehren.
|
||||
@ECHO OFF
|
||||
REM SLSTSTA.BAT
|
||||
REM Automated SLIST test for MARS NWE.
|
||||
REM
|
||||
REM Runs two comparisons:
|
||||
REM 1. Logged-in: NPUBLIC\SLIST vs PUBLIC\SLIST.
|
||||
REM 2. Logged-out: NLOGIN\SLIST vs LOGIN\SLIST from local C:\SLSTTMP.
|
||||
REM
|
||||
REM The logged-out phase uses DLYSTRT, because LOGOUT removes F: and normal
|
||||
REM network mappings. SLSTC.BAT and DLYSTRT.EXE are copied to C:\SLSTTMP,
|
||||
REM SLSTC logs out, runs the local SLIST copies, logs back in as SUPERVISOR,
|
||||
REM then queues F:\SLSTSTA.BAT PART2 with local DLYSTRT.
|
||||
REM
|
||||
REM Required for the automatic logged-out phase:
|
||||
REM SET LGNTPWD=<supervisor-password>
|
||||
REM
|
||||
REM Result tree:
|
||||
REM F:\SLSTCMP
|
||||
|
||||
IF "%1"=="" GOTO PART1
|
||||
IF "%1"=="PART2" GOTO PART2
|
||||
IF "%1"=="part2" GOTO PART2
|
||||
IF "%1"=="Part2" GOTO PART2
|
||||
GOTO USAGE
|
||||
|
||||
:PART1
|
||||
F:
|
||||
CD \
|
||||
|
||||
REM --- Clean generated test/result directories. ---
|
||||
IF EXIST SLSTCMP\NUL DELTREE /Y SLSTCMP\*.*
|
||||
IF NOT EXIST SLSTCMP\NUL MD SLSTCMP
|
||||
IF NOT EXIST SLSTCMP\OUT\NUL MD SLSTCMP\OUT
|
||||
IF NOT EXIST SLSTCMP\PUBOUT\NUL MD SLSTCMP\PUBOUT
|
||||
IF NOT EXIST SLSTCMP\LOUT\NUL MD SLSTCMP\LOUT
|
||||
IF NOT EXIST SLSTCMP\LPUBOUT\NUL MD SLSTCMP\LPUBOUT
|
||||
|
||||
ECHO SLSTSTA SLIST test > F:\SLSTCMP\RUN.LOG
|
||||
ECHO Server MARS should exist. >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO Server NWBYGONE01 is expected to be missing. >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO. >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO Logged-in baseline: F:\SLSTCMP\OUT >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO Logged-in public: F:\SLSTCMP\PUBOUT >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO Logged-out baseline/public, if LGNTPWD is set: C:\SLSTTMP then LOUT/LPUBOUT >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO. >> F:\SLSTCMP\RUN.LOG
|
||||
|
||||
ECHO === LOGGED-IN NOVELL BASELINE: NPUBLIC\SLIST === >> F:\SLSTCMP\RUN.LOG
|
||||
\NPUBLIC\SLIST > F:\SLSTCMP\OUT\D01_LIST.OUT
|
||||
\NPUBLIC\SLIST MARS > F:\SLSTCMP\OUT\D02_MARS_OK.OUT
|
||||
\NPUBLIC\SLIST NWBYGONE01 > F:\SLSTCMP\OUT\D03_NWBYGONE01_MISSING.OUT
|
||||
\NPUBLIC\SLIST /CONTINUE > F:\SLSTCMP\OUT\D04_CONT.OUT
|
||||
\NPUBLIC\SLIST MARS /CONTINUE > F:\SLSTCMP\OUT\D05_MARS_CONT_OK.OUT
|
||||
\NPUBLIC\SLIST NWBYGONE01 /CONTINUE > F:\SLSTCMP\OUT\D06_NWBYGONE01_CONT_MISSING.OUT
|
||||
REM Novell SLIST /? prints the usage on the console and does not reliably
|
||||
REM write it through stdout redirection. Keep a stable baseline file.
|
||||
ECHO Usage: SLIST [Server] [/Continue] > F:\SLSTCMP\OUT\D99_HELP.OUT
|
||||
|
||||
ECHO === LOGGED-IN PUBLIC IMPLEMENTATION: PUBLIC\SLIST === >> F:\SLSTCMP\RUN.LOG
|
||||
\PUBLIC\SLIST > F:\SLSTCMP\PUBOUT\D01_LIST.OUT
|
||||
\PUBLIC\SLIST MARS > F:\SLSTCMP\PUBOUT\D02_MARS_OK.OUT
|
||||
\PUBLIC\SLIST NWBYGONE01 > F:\SLSTCMP\PUBOUT\D03_NWBYGONE01_MISSING.OUT
|
||||
\PUBLIC\SLIST /CONTINUE > F:\SLSTCMP\PUBOUT\D04_CONT.OUT
|
||||
\PUBLIC\SLIST MARS /CONTINUE > F:\SLSTCMP\PUBOUT\D05_MARS_CONT_OK.OUT
|
||||
\PUBLIC\SLIST NWBYGONE01 /CONTINUE > F:\SLSTCMP\PUBOUT\D06_NWBYGONE01_CONT_MISSING.OUT
|
||||
\PUBLIC\SLIST /? > F:\SLSTCMP\PUBOUT\D99_HELP.OUT
|
||||
|
||||
ECHO === COMPARE LOGGED-IN OUT vs PUBOUT === > F:\SLSTCMP\COMPARE.LOG
|
||||
ECHO. >> F:\SLSTCMP\COMPARE.LOG
|
||||
ECHO === D01_LIST.OUT === >> F:\SLSTCMP\COMPARE.LOG
|
||||
FC F:\SLSTCMP\OUT\D01_LIST.OUT F:\SLSTCMP\PUBOUT\D01_LIST.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D01_LIST.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D01_LIST.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
|
||||
ECHO. >> F:\SLSTCMP\COMPARE.LOG
|
||||
ECHO === D02_MARS_OK.OUT === >> F:\SLSTCMP\COMPARE.LOG
|
||||
FC F:\SLSTCMP\OUT\D02_MARS_OK.OUT F:\SLSTCMP\PUBOUT\D02_MARS_OK.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D02_MARS_OK.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D02_MARS_OK.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
|
||||
ECHO. >> F:\SLSTCMP\COMPARE.LOG
|
||||
ECHO === D03_NWBYGONE01_MISSING.OUT === >> F:\SLSTCMP\COMPARE.LOG
|
||||
FC F:\SLSTCMP\OUT\D03_NWBYGONE01_MISSING.OUT F:\SLSTCMP\PUBOUT\D03_NWBYGONE01_MISSING.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D03_NWBYGONE01_MISSING.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D03_NWBYGONE01_MISSING.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
|
||||
ECHO. >> F:\SLSTCMP\COMPARE.LOG
|
||||
ECHO === D04_CONT.OUT === >> F:\SLSTCMP\COMPARE.LOG
|
||||
FC F:\SLSTCMP\OUT\D04_CONT.OUT F:\SLSTCMP\PUBOUT\D04_CONT.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D04_CONT.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D04_CONT.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
|
||||
ECHO. >> F:\SLSTCMP\COMPARE.LOG
|
||||
ECHO === D05_MARS_CONT_OK.OUT === >> F:\SLSTCMP\COMPARE.LOG
|
||||
FC F:\SLSTCMP\OUT\D05_MARS_CONT_OK.OUT F:\SLSTCMP\PUBOUT\D05_MARS_CONT_OK.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D05_MARS_CONT_OK.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D05_MARS_CONT_OK.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
|
||||
ECHO. >> F:\SLSTCMP\COMPARE.LOG
|
||||
ECHO === D06_NWBYGONE01_CONT_MISSING.OUT === >> F:\SLSTCMP\COMPARE.LOG
|
||||
FC F:\SLSTCMP\OUT\D06_NWBYGONE01_CONT_MISSING.OUT F:\SLSTCMP\PUBOUT\D06_NWBYGONE01_CONT_MISSING.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D06_NWBYGONE01_CONT_MISSING.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D06_NWBYGONE01_CONT_MISSING.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
|
||||
ECHO. >> F:\SLSTCMP\COMPARE.LOG
|
||||
ECHO === D99_HELP.OUT === >> F:\SLSTCMP\COMPARE.LOG
|
||||
FC F:\SLSTCMP\OUT\D99_HELP.OUT F:\SLSTCMP\PUBOUT\D99_HELP.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D99_HELP.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D99_HELP.OUT >> F:\SLSTCMP\COMPARE.LOG
|
||||
|
||||
|
||||
REM --- Optional logged-out comparison. ---
|
||||
IF "%LGNTPWD%"=="" GOTO SKIPLOGOUT
|
||||
|
||||
ECHO. >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO === PREPARE LOGGED-OUT SLIST HELPER === >> F:\SLSTCMP\RUN.LOG
|
||||
IF EXIST C:\SLSTTMP DELTREE /Y C:\SLSTTMP >> F:\SLSTCMP\RUN.LOG
|
||||
MD C:\SLSTTMP >> F:\SLSTCMP\RUN.LOG
|
||||
MD C:\SLSTTMP\LOUT >> F:\SLSTCMP\RUN.LOG
|
||||
MD C:\SLSTTMP\LPUBOUT >> F:\SLSTCMP\RUN.LOG
|
||||
|
||||
REM Copy everything needed while F: is still available.
|
||||
REM SLIST is officially available from LOGIN while logged out, so compare
|
||||
REM NLOGIN\SLIST against LOGIN\SLIST after LOGOUT.
|
||||
COPY \NLOGIN\SLIST.EXE C:\SLSTTMP\NSLIST.EXE >> F:\SLSTCMP\RUN.LOG
|
||||
COPY \LOGIN\SLIST.EXE C:\SLSTTMP\SLIST.EXE >> F:\SLSTCMP\RUN.LOG
|
||||
COPY \NPUBLIC\LOGOUT.EXE C:\SLSTTMP\LOGOUT.EXE >> F:\SLSTCMP\RUN.LOG
|
||||
COPY \LOGIN\LOGIN.EXE C:\SLSTTMP\LOGIN.EXE >> F:\SLSTCMP\RUN.LOG
|
||||
COPY \PUBLIC\DLYSTRT.EXE C:\SLSTTMP\DLYSTRT.EXE >> F:\SLSTCMP\RUN.LOG
|
||||
COPY F:\SLSTC.BAT C:\SLSTTMP\SLSTC.BAT >> F:\SLSTCMP\RUN.LOG
|
||||
|
||||
IF EXIST C:\SLSTTMP\DLYSTRT.EXE GOTO HAVEDLYLOCAL
|
||||
ECHO ERROR: C:\SLSTTMP\DLYSTRT.EXE not copied. >> F:\SLSTCMP\RUN.LOG
|
||||
GOTO SKIPLOGOUT
|
||||
:HAVEDLYLOCAL
|
||||
IF EXIST C:\SLSTTMP\SLSTC.BAT GOTO HAVEHELPER
|
||||
ECHO ERROR: C:\SLSTTMP\SLSTC.BAT not copied. >> F:\SLSTCMP\RUN.LOG
|
||||
GOTO SKIPLOGOUT
|
||||
:HAVEHELPER
|
||||
|
||||
C:
|
||||
CD \SLSTTMP
|
||||
C:\SLSTTMP\DLYSTRT.EXE /T:2 C:\SLSTTMP\SLSTC.BAT >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO DLYSTRT queued C:\SLSTTMP\SLSTC.BAT. >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO SLSTSTA Part 1 fertig. Bitte auf SLSTSTA PART2 warten.
|
||||
GOTO END
|
||||
|
||||
:SKIPLOGOUT
|
||||
ECHO. >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO Logged-out SLIST comparison skipped because LGNTPWD is not set or helper setup failed. >> F:\SLSTCMP\RUN.LOG
|
||||
GOTO SUMMARY
|
||||
|
||||
:PART2
|
||||
F:
|
||||
CD \
|
||||
IF NOT EXIST SLSTCMP\NUL MD SLSTCMP
|
||||
IF NOT EXIST SLSTCMP\LOUT\NUL MD SLSTCMP\LOUT
|
||||
IF NOT EXIST SLSTCMP\LPUBOUT\NUL MD SLSTCMP\LPUBOUT
|
||||
|
||||
ECHO. >> F:\SLSTCMP\RUN.LOG
|
||||
ECHO Part 2 collecting logged-out SLIST files from C:\SLSTTMP. >> F:\SLSTCMP\RUN.LOG
|
||||
COPY C:\SLSTTMP\LOUT\*.OUT F:\SLSTCMP\LOUT >> F:\SLSTCMP\RUN.LOG
|
||||
COPY C:\SLSTTMP\LPUBOUT\*.OUT F:\SLSTCMP\LPUBOUT >> F:\SLSTCMP\RUN.LOG
|
||||
COPY C:\SLSTTMP\*.OUT F:\SLSTCMP >> F:\SLSTCMP\RUN.LOG
|
||||
COPY C:\SLSTTMP\*.TXT F:\SLSTCMP >> F:\SLSTCMP\RUN.LOG
|
||||
|
||||
ECHO === COMPARE LOGGED-OUT LOUT vs LPUBOUT === > F:\SLSTCMP\LCOMP.LOG
|
||||
ECHO. >> F:\SLSTCMP\LCOMP.LOG
|
||||
ECHO === D01_LIST.OUT === >> F:\SLSTCMP\LCOMP.LOG
|
||||
FC F:\SLSTCMP\LOUT\D01_LIST.OUT F:\SLSTCMP\LPUBOUT\D01_LIST.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D01_LIST.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D01_LIST.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
|
||||
ECHO. >> F:\SLSTCMP\LCOMP.LOG
|
||||
ECHO === D02_MARS_OK.OUT === >> F:\SLSTCMP\LCOMP.LOG
|
||||
FC F:\SLSTCMP\LOUT\D02_MARS_OK.OUT F:\SLSTCMP\LPUBOUT\D02_MARS_OK.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D02_MARS_OK.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D02_MARS_OK.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
|
||||
ECHO. >> F:\SLSTCMP\LCOMP.LOG
|
||||
ECHO === D03_NWBYGONE01_MISSING.OUT === >> F:\SLSTCMP\LCOMP.LOG
|
||||
FC F:\SLSTCMP\LOUT\D03_NWBYGONE01_MISSING.OUT F:\SLSTCMP\LPUBOUT\D03_NWBYGONE01_MISSING.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D03_NWBYGONE01_MISSING.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D03_NWBYGONE01_MISSING.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
|
||||
ECHO. >> F:\SLSTCMP\LCOMP.LOG
|
||||
ECHO === D04_CONT.OUT === >> F:\SLSTCMP\LCOMP.LOG
|
||||
FC F:\SLSTCMP\LOUT\D04_CONT.OUT F:\SLSTCMP\LPUBOUT\D04_CONT.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D04_CONT.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D04_CONT.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
|
||||
ECHO. >> F:\SLSTCMP\LCOMP.LOG
|
||||
ECHO === D05_MARS_CONT_OK.OUT === >> F:\SLSTCMP\LCOMP.LOG
|
||||
FC F:\SLSTCMP\LOUT\D05_MARS_CONT_OK.OUT F:\SLSTCMP\LPUBOUT\D05_MARS_CONT_OK.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D05_MARS_CONT_OK.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D05_MARS_CONT_OK.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
|
||||
ECHO. >> F:\SLSTCMP\LCOMP.LOG
|
||||
ECHO === D06_NWBYGONE01_CONT_MISSING.OUT === >> F:\SLSTCMP\LCOMP.LOG
|
||||
FC F:\SLSTCMP\LOUT\D06_NWBYGONE01_CONT_MISSING.OUT F:\SLSTCMP\LPUBOUT\D06_NWBYGONE01_CONT_MISSING.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D06_NWBYGONE01_CONT_MISSING.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D06_NWBYGONE01_CONT_MISSING.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
|
||||
ECHO. >> F:\SLSTCMP\LCOMP.LOG
|
||||
ECHO === D99_HELP.OUT === >> F:\SLSTCMP\LCOMP.LOG
|
||||
FC F:\SLSTCMP\LOUT\D99_HELP.OUT F:\SLSTCMP\LPUBOUT\D99_HELP.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF ERRORLEVEL 1 ECHO DIFF: D99_HELP.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
IF NOT ERRORLEVEL 1 ECHO OK: D99_HELP.OUT >> F:\SLSTCMP\LCOMP.LOG
|
||||
|
||||
GOTO SUMMARY
|
||||
|
||||
:SUMMARY
|
||||
ECHO === SUMMARY === > F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO SLSTSTA SLIST comparison finished. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO Output directories: >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO - OUT logged-in Novell NPUBLIC baseline. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO - PUBOUT logged-in PUBLIC implementation output. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO - LOUT logged-out Novell NLOGIN baseline, if LGNTPWD was set. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO - LPUBOUT logged-out LOGIN implementation output, if LGNTPWD was set. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO Compare result is in F:\SLSTCMP\COMPARE.LOG. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO Logged-out compare result, if run, is in F:\SLSTCMP\LCOMP.LOG. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
ECHO Optional: SLSTZIP ausfuehren. >> F:\SLSTCMP\SUMMARY.TXT
|
||||
|
||||
ECHO SLSTSTA fertig.
|
||||
ECHO Ergebnisse liegen in F:\SLSTCMP
|
||||
ECHO Optional: SLSTZIP ausfuehren.
|
||||
GOTO END
|
||||
|
||||
:USAGE
|
||||
ECHO Usage: SLSTSTA [PART2]
|
||||
|
||||
:END
|
||||
|
||||
@@ -1,25 +1,24 @@
|
||||
@ECHO OFF
|
||||
REM SLSTZIP.BAT
|
||||
REM Optional packer for SLSTSTA result files.
|
||||
REM Requires ZIP.EXE in PATH or current directory.
|
||||
|
||||
F:
|
||||
CD \SLSTCMP
|
||||
|
||||
IF EXIST SLSTSTA.ZIP DEL SLSTSTA.ZIP
|
||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
||||
|
||||
ECHO Creating SLSTSTA.ZIP > ZIP.LOG
|
||||
ZIP -r SLSTSTA.ZIP RUN.LOG SUMMARY.TXT OUT >> ZIP.LOG
|
||||
|
||||
|
||||
REM Cleanup generated test directories after ZIP.
|
||||
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
|
||||
REM No separate TEST directory for this test; SLSTCMP is the result directory.
|
||||
CD \
|
||||
ECHO.
|
||||
ECHO ZIP step finished.
|
||||
ECHO Check:
|
||||
ECHO F:\SLSTCMP\SLSTSTA.ZIP
|
||||
ECHO F:\SLSTCMP\ZIP.LOG
|
||||
ECHO.
|
||||
@ECHO OFF
|
||||
REM SLSTZIP.BAT
|
||||
REM Optional packer for SLSTSTA result files.
|
||||
REM Requires ZIP.EXE in PATH or current directory.
|
||||
|
||||
F:
|
||||
CD \SLSTCMP
|
||||
|
||||
IF EXIST SLSTSTA.ZIP DEL SLSTSTA.ZIP
|
||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
||||
|
||||
ECHO Creating SLSTSTA.ZIP > ZIP.LOG
|
||||
ZIP -r SLSTSTA.ZIP RUN.LOG SUMMARY.TXT COMPARE.LOG LCOMP.LOG OUT PUBOUT LOUT LPUBOUT *.OUT *.TXT >> ZIP.LOG
|
||||
|
||||
REM Cleanup local helper directory after ZIP, if it exists.
|
||||
IF EXIST C:\SLSTTMP DELTREE /Y C:\SLSTTMP >> ZIP.LOG
|
||||
|
||||
CD \
|
||||
ECHO.
|
||||
ECHO ZIP step finished.
|
||||
ECHO Check:
|
||||
ECHO F:\SLSTCMP\SLSTSTA.ZIP
|
||||
ECHO F:\SLSTCMP\ZIP.LOG
|
||||
ECHO.
|
||||
|
||||
Reference in New Issue
Block a user