Compare commits
17 Commits
master
...
22d862cd12
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
22d862cd12 | ||
|
|
417716a36f | ||
|
|
b2da728f4b | ||
|
|
3b8664cb77 | ||
|
|
acac4892a0 | ||
|
|
c64a20acac | ||
|
|
36b1458eb7 | ||
|
|
fa27fe4213 | ||
|
|
6d005a1713 | ||
|
|
af2f16add4 | ||
|
|
932d08cac8 | ||
|
|
0e42d3a85b | ||
|
|
093af0687a | ||
|
|
dcb74331e7 | ||
|
|
ad2bc6b02e | ||
|
|
5e75a9e8a7 | ||
|
|
975f34431a |
230
CMakeLists.txt
230
CMakeLists.txt
@@ -1,26 +1,17 @@
|
|||||||
# DOS utilities for mars-nwe.
|
# DOS utilities for mars-nwe.
|
||||||
#
|
#
|
||||||
# Default install mode uses a split:
|
# Default mode: install a prebuilt net.exe from this source tree. This keeps the
|
||||||
# - legacy command names are installed from netold.exe
|
# normal mars-nwe build independent from Open Watcom.
|
||||||
# - new command names that netold.exe does not contain are installed from net.exe
|
|
||||||
#
|
#
|
||||||
# Maintainer mode can rebuild the new net.exe with Open Watcom. The freshly
|
# Maintainer mode: configure with -DMARS_NWE_BUILD_DOSUTILS=ON to rebuild
|
||||||
# built binary is only installed when MARS_NWE_INSTALL_NEW_DOSUTILS is ON, or
|
# net.exe with Open Watcom v2 on Linux.
|
||||||
# for the new-only command names in the default split install.
|
|
||||||
|
|
||||||
option(MAINTAINER_BUILD "Enable maintainer-only DOS tool helpers and diagnostics" OFF)
|
set(MARS_DOSUTILS_NET_EXE
|
||||||
|
|
||||||
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"
|
|
||||||
)
|
|
||||||
|
|
||||||
set(MARS_DOSUTILS_NEW_NET_EXE
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/net.exe"
|
"${CMAKE_CURRENT_SOURCE_DIR}/net.exe"
|
||||||
CACHE FILEPATH "New/experimental DOS net.exe used for new-only tools or when MARS_NWE_INSTALL_NEW_DOSUTILS is ON"
|
CACHE FILEPATH "Prebuilt DOS net.exe used for installation when MARS_NWE_BUILD_DOSUTILS is OFF"
|
||||||
)
|
)
|
||||||
|
|
||||||
set(MARS_DOSUTILS_LEGACY_TOOLS
|
set(MARS_DOSUTILS_PUBLIC_TOOLS
|
||||||
net
|
net
|
||||||
login
|
login
|
||||||
profile
|
profile
|
||||||
@@ -36,21 +27,8 @@ set(MARS_DOSUTILS_LEGACY_TOOLS
|
|||||||
endcap
|
endcap
|
||||||
)
|
)
|
||||||
|
|
||||||
# Tools not present in netold.exe. These are installed from the new binary
|
# Do not install slist.exe yet: func_slist() is empty and SLIST is disabled in net.c.
|
||||||
# even in the default split mode.
|
# Do not install tests/debug by default either; they are developer-only helpers.
|
||||||
set(MARS_DOSUTILS_NEW_ONLY_TOOLS
|
|
||||||
slist
|
|
||||||
flag
|
|
||||||
flagdir
|
|
||||||
rights
|
|
||||||
grant
|
|
||||||
revoke
|
|
||||||
remove
|
|
||||||
ndir
|
|
||||||
creator
|
|
||||||
whoami
|
|
||||||
ncopy
|
|
||||||
)
|
|
||||||
|
|
||||||
if(MARS_NWE_BUILD_DOSUTILS)
|
if(MARS_NWE_BUILD_DOSUTILS)
|
||||||
find_package(OpenWatcom REQUIRED)
|
find_package(OpenWatcom REQUIRED)
|
||||||
@@ -62,87 +40,25 @@ if(MARS_NWE_BUILD_DOSUTILS)
|
|||||||
ncpcall.c
|
ncpcall.c
|
||||||
login.c
|
login.c
|
||||||
map.c
|
map.c
|
||||||
slist.c
|
|
||||||
ndir.c
|
|
||||||
flag.c
|
|
||||||
flagdir.c
|
|
||||||
rights.c
|
|
||||||
grant.c
|
|
||||||
revoke.c
|
|
||||||
remove.c
|
|
||||||
trustee.c
|
|
||||||
ncpapi.c
|
|
||||||
nwcrypt.c
|
nwcrypt.c
|
||||||
nwdebug.c
|
nwdebug.c
|
||||||
nwtests.c
|
nwtests.c
|
||||||
capture.c
|
capture.c
|
||||||
creator.c
|
|
||||||
whoami.c
|
|
||||||
ncopy.c
|
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ipx.obj"
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/kern.obj"
|
||||||
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
|
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
|
||||||
"${OPENWATCOM_WASM}"
|
"${OPENWATCOM_WASM}"
|
||||||
-q
|
-q
|
||||||
-zq
|
-zq
|
||||||
-fo="${CMAKE_CURRENT_BINARY_DIR}/ipx.obj"
|
-fo="${CMAKE_CURRENT_BINARY_DIR}/kern.obj"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/ipx.asm"
|
"${CMAKE_CURRENT_SOURCE_DIR}/kern_wasm.asm"
|
||||||
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/ipx.asm"
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/kern_wasm.asm"
|
||||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ncp.obj"
|
|
||||||
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
|
|
||||||
"${OPENWATCOM_WASM}"
|
|
||||||
-q
|
|
||||||
-zq
|
|
||||||
-fo="${CMAKE_CURRENT_BINARY_DIR}/ncp.obj"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/ncp.asm"
|
|
||||||
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/ncp.asm"
|
|
||||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
|
||||||
VERBATIM
|
|
||||||
)
|
|
||||||
|
|
||||||
set(DOSUTILS_OBJECTS)
|
|
||||||
foreach(src IN LISTS DOSUTILS_C_SOURCES)
|
|
||||||
get_filename_component(obj_name "${src}" NAME_WE)
|
|
||||||
set(obj "${CMAKE_CURRENT_BINARY_DIR}/${obj_name}.obj")
|
|
||||||
list(APPEND DOSUTILS_OBJECTS "${obj}")
|
|
||||||
|
|
||||||
set(DOSUTILS_WCL_DEFS)
|
|
||||||
if(MAINTAINER_BUILD)
|
|
||||||
list(APPEND DOSUTILS_WCL_DEFS -dMAINTAINER_BUILD)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT "${obj}"
|
|
||||||
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
|
|
||||||
"${OPENWATCOM_WCL}"
|
|
||||||
-q
|
|
||||||
-zq
|
|
||||||
-bt=dos
|
|
||||||
-ml
|
|
||||||
-0
|
|
||||||
${DOSUTILS_WCL_DEFS}
|
|
||||||
-c
|
|
||||||
-fo="${obj}"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/${src}"
|
|
||||||
DEPENDS
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/${src}"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/net.h"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/ipx.h"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/ncp.h"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/ncpapi.h"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/nwcrypt.h"
|
|
||||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
|
||||||
VERBATIM
|
|
||||||
)
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/net.exe"
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/net.exe"
|
||||||
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
|
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
|
||||||
@@ -154,14 +70,15 @@ if(MARS_NWE_BUILD_DOSUTILS)
|
|||||||
-0
|
-0
|
||||||
-k32768
|
-k32768
|
||||||
-fe="${CMAKE_CURRENT_BINARY_DIR}/net.exe"
|
-fe="${CMAKE_CURRENT_BINARY_DIR}/net.exe"
|
||||||
${DOSUTILS_OBJECTS}
|
${DOSUTILS_C_SOURCES}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ipx.obj"
|
"${CMAKE_CURRENT_BINARY_DIR}/kern.obj"
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ncp.obj"
|
|
||||||
DEPENDS
|
DEPENDS
|
||||||
${DOSUTILS_OBJECTS}
|
${DOSUTILS_C_SOURCES}
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ipx.obj"
|
"${CMAKE_CURRENT_BINARY_DIR}/kern.obj"
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/ncp.obj"
|
net.h
|
||||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
kern.h
|
||||||
|
nwcrypt.h
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -169,109 +86,32 @@ if(MARS_NWE_BUILD_DOSUTILS)
|
|||||||
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/net.exe"
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/net.exe"
|
||||||
)
|
)
|
||||||
|
|
||||||
set(MARS_DOSUTILS_BUILT_NET_EXE "${CMAKE_CURRENT_BINARY_DIR}/net.exe")
|
set(MARS_DOSUTILS_NET_EXE "${CMAKE_CURRENT_BINARY_DIR}/net.exe")
|
||||||
|
|
||||||
if(MAINTAINER_BUILD)
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/dlystrt.exe"
|
|
||||||
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
|
|
||||||
"${OPENWATCOM_WCL}"
|
|
||||||
-q
|
|
||||||
-zq
|
|
||||||
-bt=dos
|
|
||||||
-ms
|
|
||||||
-0
|
|
||||||
-dMAINTAINER_BUILD
|
|
||||||
-fe="${CMAKE_CURRENT_BINARY_DIR}/dlystrt.exe"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/dlystrt.c"
|
|
||||||
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/dlystrt.c"
|
|
||||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
|
||||||
VERBATIM
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_target(dlystrt ALL
|
|
||||||
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/dlystrt.exe"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
set(MARS_DOSUTILS_BUILT_NET_EXE "")
|
if(NOT EXISTS "${MARS_DOSUTILS_NET_EXE}")
|
||||||
endif()
|
|
||||||
|
|
||||||
if(MARS_NWE_BUILD_DOSUTILS)
|
|
||||||
set(MARS_DOSUTILS_SELECTED_NEW_EXE "${MARS_DOSUTILS_BUILT_NET_EXE}")
|
|
||||||
else()
|
|
||||||
set(MARS_DOSUTILS_SELECTED_NEW_EXE "${MARS_DOSUTILS_NEW_NET_EXE}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(MARS_NWE_INSTALL_NEW_DOSUTILS)
|
|
||||||
set(MARS_DOSUTILS_SELECTED_LEGACY_EXE "${MARS_DOSUTILS_SELECTED_NEW_EXE}")
|
|
||||||
else()
|
|
||||||
set(MARS_DOSUTILS_SELECTED_LEGACY_EXE "${MARS_DOSUTILS_LEGACY_NET_EXE}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(MARS_DOSUTILS_SELECTED_LEGACY_IS_BUILT FALSE)
|
|
||||||
set(MARS_DOSUTILS_SELECTED_NEW_IS_BUILT FALSE)
|
|
||||||
if(MARS_NWE_BUILD_DOSUTILS)
|
|
||||||
if(MARS_DOSUTILS_SELECTED_LEGACY_EXE STREQUAL MARS_DOSUTILS_BUILT_NET_EXE)
|
|
||||||
set(MARS_DOSUTILS_SELECTED_LEGACY_IS_BUILT TRUE)
|
|
||||||
endif()
|
|
||||||
if(MARS_DOSUTILS_SELECTED_NEW_EXE STREQUAL MARS_DOSUTILS_BUILT_NET_EXE)
|
|
||||||
set(MARS_DOSUTILS_SELECTED_NEW_IS_BUILT TRUE)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(MARS_NWE_INSTALL_DOSUTILS)
|
|
||||||
if(NOT MARS_DOSUTILS_SELECTED_LEGACY_IS_BUILT AND NOT EXISTS "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}")
|
|
||||||
message(FATAL_ERROR
|
message(FATAL_ERROR
|
||||||
"Selected legacy/default DOS utility missing: ${MARS_DOSUTILS_SELECTED_LEGACY_EXE}. "
|
"Prebuilt DOS utility missing: ${MARS_DOSUTILS_NET_EXE}. "
|
||||||
"Commit dosutils/netold.exe, enable MARS_NWE_INSTALL_NEW_DOSUTILS, "
|
"Either commit net.exe into dosutils or configure with "
|
||||||
"or enable MARS_NWE_BUILD_DOSUTILS."
|
"-DMARS_NWE_BUILD_DOSUTILS=ON and Open Watcom installed."
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(NOT MARS_DOSUTILS_SELECTED_NEW_IS_BUILT AND NOT EXISTS "${MARS_DOSUTILS_SELECTED_NEW_EXE}")
|
foreach(tool IN LISTS MARS_DOSUTILS_PUBLIC_TOOLS)
|
||||||
message(FATAL_ERROR
|
|
||||||
"Selected new DOS utility missing: ${MARS_DOSUTILS_SELECTED_NEW_EXE}. "
|
|
||||||
"Commit dosutils/net.exe or enable MARS_NWE_BUILD_DOSUTILS."
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
message(STATUS "DOS legacy/default utility binary: ${MARS_DOSUTILS_SELECTED_LEGACY_EXE}")
|
|
||||||
message(STATUS "DOS new-only utility binary: ${MARS_DOSUTILS_SELECTED_NEW_EXE}")
|
|
||||||
|
|
||||||
foreach(tool IN LISTS MARS_DOSUTILS_LEGACY_TOOLS)
|
|
||||||
if(tool STREQUAL "net")
|
if(tool STREQUAL "net")
|
||||||
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
|
install(FILES "${MARS_DOSUTILS_NET_EXE}"
|
||||||
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public"
|
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public")
|
||||||
RENAME net.exe)
|
|
||||||
else()
|
else()
|
||||||
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
|
install(FILES "${MARS_DOSUTILS_NET_EXE}"
|
||||||
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public"
|
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public"
|
||||||
RENAME "${tool}.exe")
|
RENAME "${tool}.exe")
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
foreach(tool IN LISTS MARS_DOSUTILS_NEW_ONLY_TOOLS)
|
install(FILES "${MARS_DOSUTILS_NET_EXE}"
|
||||||
install(FILES "${MARS_DOSUTILS_SELECTED_NEW_EXE}"
|
|
||||||
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public"
|
|
||||||
RENAME "${tool}.exe")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
|
|
||||||
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
|
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
|
||||||
RENAME login.exe)
|
RENAME login.exe)
|
||||||
|
|
||||||
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
|
install(FILES "${MARS_DOSUTILS_NET_EXE}"
|
||||||
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
|
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
|
||||||
RENAME map.exe)
|
RENAME map.exe)
|
||||||
|
|
||||||
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
|
|
||||||
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
|
|
||||||
RENAME slist.exe)
|
|
||||||
|
|
||||||
if(MAINTAINER_BUILD AND MARS_NWE_BUILD_DOSUTILS)
|
|
||||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/dlystrt.exe"
|
|
||||||
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public"
|
|
||||||
RENAME dlystrt.exe)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|||||||
338
COPYING
338
COPYING
@@ -1,338 +0,0 @@
|
|||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
Version 2, June 1991
|
|
||||||
|
|
||||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
|
||||||
<https://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
License is intended to guarantee your freedom to share and change free
|
|
||||||
software--to make sure the software is free for all its users. This
|
|
||||||
General Public License applies to most of the Free Software
|
|
||||||
Foundation's software and to any other program whose authors commit to
|
|
||||||
using it. (Some other Free Software Foundation software is covered by
|
|
||||||
the GNU Lesser General Public License instead.) You can apply it to
|
|
||||||
your programs, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
this service if you wish), that you receive source code or can get it
|
|
||||||
if you want it, that you can change the software or use pieces of it
|
|
||||||
in new free programs; and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
anyone to deny you these rights or to ask you to surrender the rights.
|
|
||||||
These restrictions translate to certain responsibilities for you if you
|
|
||||||
distribute copies of the software, or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of such a program, whether
|
|
||||||
gratis or for a fee, you must give the recipients all the rights that
|
|
||||||
you have. You must make sure that they, too, receive or can get the
|
|
||||||
source code. And you must show them these terms so they know their
|
|
||||||
rights.
|
|
||||||
|
|
||||||
We protect your rights with two steps: (1) copyright the software, and
|
|
||||||
(2) offer you this license which gives you legal permission to copy,
|
|
||||||
distribute and/or modify the software.
|
|
||||||
|
|
||||||
Also, for each author's protection and ours, we want to make certain
|
|
||||||
that everyone understands that there is no warranty for this free
|
|
||||||
software. If the software is modified by someone else and passed on, we
|
|
||||||
want its recipients to know that what they have is not the original, so
|
|
||||||
that any problems introduced by others will not reflect on the original
|
|
||||||
authors' reputations.
|
|
||||||
|
|
||||||
Finally, any free program is threatened constantly by software
|
|
||||||
patents. We wish to avoid the danger that redistributors of a free
|
|
||||||
program will individually obtain patent licenses, in effect making the
|
|
||||||
program proprietary. To prevent this, we have made it clear that any
|
|
||||||
patent must be licensed for everyone's free use or not licensed at all.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License applies to any program or other work which contains
|
|
||||||
a notice placed by the copyright holder saying it may be distributed
|
|
||||||
under the terms of this General Public License. The "Program", below,
|
|
||||||
refers to any such program or work, and a "work based on the Program"
|
|
||||||
means either the Program or any derivative work under copyright law:
|
|
||||||
that is to say, a work containing the Program or a portion of it,
|
|
||||||
either verbatim or with modifications and/or translated into another
|
|
||||||
language. (Hereinafter, translation is included without limitation in
|
|
||||||
the term "modification".) Each licensee is addressed as "you".
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
|
||||||
covered by this License; they are outside its scope. The act of
|
|
||||||
running the Program is not restricted, and the output from the Program
|
|
||||||
is covered only if its contents constitute a work based on the
|
|
||||||
Program (independent of having been made by running the Program).
|
|
||||||
Whether that is true depends on what the Program does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Program's
|
|
||||||
source code as you receive it, in any medium, provided that you
|
|
||||||
conspicuously and appropriately publish on each copy an appropriate
|
|
||||||
copyright notice and disclaimer of warranty; keep intact all the
|
|
||||||
notices that refer to this License and to the absence of any warranty;
|
|
||||||
and give any other recipients of the Program a copy of this License
|
|
||||||
along with the Program.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy, and
|
|
||||||
you may at your option offer warranty protection in exchange for a fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Program or any portion
|
|
||||||
of it, thus forming a work based on the Program, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) You must cause the modified files to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
b) You must cause any work that you distribute or publish, that in
|
|
||||||
whole or in part contains or is derived from the Program or any
|
|
||||||
part thereof, to be licensed as a whole at no charge to all third
|
|
||||||
parties under the terms of this License.
|
|
||||||
|
|
||||||
c) If the modified program normally reads commands interactively
|
|
||||||
when run, you must cause it, when started running for such
|
|
||||||
interactive use in the most ordinary way, to print or display an
|
|
||||||
announcement including an appropriate copyright notice and a
|
|
||||||
notice that there is no warranty (or else, saying that you provide
|
|
||||||
a warranty) and that users may redistribute the program under
|
|
||||||
these conditions, and telling the user how to view a copy of this
|
|
||||||
License. (Exception: if the Program itself is interactive but
|
|
||||||
does not normally print such an announcement, your work based on
|
|
||||||
the Program is not required to print an announcement.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Program,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Program, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Program.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Program
|
|
||||||
with the Program (or with a work based on the Program) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may copy and distribute the Program (or a work based on it,
|
|
||||||
under Section 2) in object code or executable form under the terms of
|
|
||||||
Sections 1 and 2 above provided that you also do one of the following:
|
|
||||||
|
|
||||||
a) Accompany it with the complete corresponding machine-readable
|
|
||||||
source code, which must be distributed under the terms of Sections
|
|
||||||
1 and 2 above on a medium customarily used for software interchange; or,
|
|
||||||
|
|
||||||
b) Accompany it with a written offer, valid for at least three
|
|
||||||
years, to give any third party, for a charge no more than your
|
|
||||||
cost of physically performing source distribution, a complete
|
|
||||||
machine-readable copy of the corresponding source code, to be
|
|
||||||
distributed under the terms of Sections 1 and 2 above on a medium
|
|
||||||
customarily used for software interchange; or,
|
|
||||||
|
|
||||||
c) Accompany it with the information you received as to the offer
|
|
||||||
to distribute corresponding source code. (This alternative is
|
|
||||||
allowed only for noncommercial distribution and only if you
|
|
||||||
received the program in object code or executable form with such
|
|
||||||
an offer, in accord with Subsection b above.)
|
|
||||||
|
|
||||||
The source code for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For an executable work, complete source
|
|
||||||
code means all the source code for all modules it contains, plus any
|
|
||||||
associated interface definition files, plus the scripts used to
|
|
||||||
control compilation and installation of the executable. However, as a
|
|
||||||
special exception, the source code distributed need not include
|
|
||||||
anything that is normally distributed (in either source or binary
|
|
||||||
form) with the major components (compiler, kernel, and so on) of the
|
|
||||||
operating system on which the executable runs, unless that component
|
|
||||||
itself accompanies the executable.
|
|
||||||
|
|
||||||
If distribution of executable or object code is made by offering
|
|
||||||
access to copy from a designated place, then offering equivalent
|
|
||||||
access to copy the source code from the same place counts as
|
|
||||||
distribution of the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
4. You may not copy, modify, sublicense, or distribute the Program
|
|
||||||
except as expressly provided under this License. Any attempt
|
|
||||||
otherwise to copy, modify, sublicense or distribute the Program is
|
|
||||||
void, and will automatically terminate your rights under this License.
|
|
||||||
However, parties who have received copies, or rights, from you under
|
|
||||||
this License will not have their licenses terminated so long as such
|
|
||||||
parties remain in full compliance.
|
|
||||||
|
|
||||||
5. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Program or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Program (or any work based on the
|
|
||||||
Program), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Program or works based on it.
|
|
||||||
|
|
||||||
6. Each time you redistribute the Program (or any work based on the
|
|
||||||
Program), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute or modify the Program subject to
|
|
||||||
these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties to
|
|
||||||
this License.
|
|
||||||
|
|
||||||
7. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Program at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Program by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Program.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under
|
|
||||||
any particular circumstance, the balance of the section is intended to
|
|
||||||
apply and the section as a whole is intended to apply in other
|
|
||||||
circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system, which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
8. If the distribution and/or use of the Program is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Program under this License
|
|
||||||
may add an explicit geographical distribution limitation excluding
|
|
||||||
those countries, so that distribution is permitted only in or among
|
|
||||||
countries not thus excluded. In such case, this License incorporates
|
|
||||||
the limitation as if written in the body of this License.
|
|
||||||
|
|
||||||
9. The Free Software Foundation may publish revised and/or new versions
|
|
||||||
of the General Public License from time to time. Such new versions will
|
|
||||||
be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Program
|
|
||||||
specifies a version number of this License which applies to it and "any
|
|
||||||
later version", you have the option of following the terms and conditions
|
|
||||||
either of that version or of any later version published by the Free
|
|
||||||
Software Foundation. If the Program does not specify a version number of
|
|
||||||
this License, you may choose any version ever published by the Free Software
|
|
||||||
Foundation.
|
|
||||||
|
|
||||||
10. If you wish to incorporate parts of the Program into other free
|
|
||||||
programs whose distribution conditions are different, write to the author
|
|
||||||
to ask for permission. For software which is copyrighted by the Free
|
|
||||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
|
||||||
make exceptions for this. Our decision will be guided by the two goals
|
|
||||||
of preserving the free status of all derivatives of our free software and
|
|
||||||
of promoting the sharing and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
|
||||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
|
||||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
|
||||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
|
||||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
|
||||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
|
||||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
|
||||||
REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
|
||||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
|
||||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
|
||||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
|
||||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
|
||||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
|
||||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If the program is interactive, make it output a short notice like this
|
|
||||||
when it starts in an interactive mode:
|
|
||||||
|
|
||||||
Gnomovision version 69, Copyright (C) year name of author
|
|
||||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
||||||
This is free software, and you are welcome to redistribute it
|
|
||||||
under certain conditions; type `show c' for details.
|
|
||||||
|
|
||||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
|
||||||
parts of the General Public License. Of course, the commands you use may
|
|
||||||
be called something other than `show w' and `show c'; they could even be
|
|
||||||
mouse-clicks or menu items--whatever suits your program.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
|
||||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
|
||||||
|
|
||||||
<signature of Moe Ghoul>, 1 April 1989
|
|
||||||
Moe Ghoul, President of Vice
|
|
||||||
|
|
||||||
This General Public License does not permit incorporating your program into
|
|
||||||
proprietary programs. If your program is a subroutine library, you may
|
|
||||||
consider it more useful to permit linking proprietary applications with the
|
|
||||||
library. If this is what you want to do, use the GNU Lesser General
|
|
||||||
Public License instead of this License.
|
|
||||||
474
README.md
474
README.md
@@ -5,43 +5,9 @@ DOS client-side utilities for **mars_nwe** and compatible NetWare-style NCP envi
|
|||||||
This repository contains the source for a small DOS utility suite built around a **single multi-call executable**, `net.exe`. The program can be used either as:
|
This repository contains the source for a small DOS utility suite built around a **single multi-call executable**, `net.exe`. The program can be used either as:
|
||||||
|
|
||||||
- `net <command> [args...]`, or
|
- `net <command> [args...]`, or
|
||||||
- a renamed executable such as `login.exe`, `map.exe`, `flag.exe`, `flagdir.exe`, `rights.exe`, `grant.exe`, `revoke.exe`, `remove.exe`, `capture.exe`, or `logout.exe`.
|
- a renamed executable such as `login.exe`, `map.exe`, `capture.exe`, or `logout.exe`
|
||||||
|
|
||||||
The command dispatcher lives in `net.c`, and the install rules deploy the same binary under multiple command names in `SYS:PUBLIC` and selected names in `SYS:LOGIN`.
|
That design is explicit in the command table in `net.c`, and the install rules also deploy the same binary under multiple command names. The original project documentation describes it as a “simple DOS-client program to allow standard NCP network actions, mainly for mars_nwe,” and also notes that it was still incomplete at the time of writing.
|
||||||
|
|
||||||
## 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
|
|
||||||
Novell-compatible comparison tests.
|
|
||||||
|
|
||||||
Recently validated with byte-for-byte Novell comparison tests or equivalent
|
|
||||||
readback tests:
|
|
||||||
|
|
||||||
- `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:
|
|
||||||
|
|
||||||
- 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 `PURGE` and `SALVAGE`
|
|
||||||
- further MARS-NWE server-side NCP endpoint coverage where newer tests expose gaps
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
@@ -52,16 +18,7 @@ Still to validate or continue:
|
|||||||
- Printer capture and release (`CAPTURE`, `ENDCAP`)
|
- Printer capture and release (`CAPTURE`, `ENDCAP`)
|
||||||
- Scripted session setup through command files
|
- Scripted session setup through command files
|
||||||
- External program execution via `SPAWN` and `EXEC`
|
- External program execution via `SPAWN` and `EXEC`
|
||||||
- Server listing through `SLIST`
|
|
||||||
- Directory listing through `NDIR`
|
|
||||||
- File attribute management through `FLAG`
|
|
||||||
- Directory attribute management through `FLAGDIR`
|
|
||||||
- Effective rights display through `RIGHTS`
|
|
||||||
- Trustee rights assignment through `GRANT`
|
|
||||||
- Trustee rights removal through `REVOKE`
|
|
||||||
- Trustee assignment deletion through `REMOVE`
|
|
||||||
- Optional mars_nwe debug control hooks
|
- Optional mars_nwe debug control hooks
|
||||||
- Developer diagnostics through `TESTS`
|
|
||||||
|
|
||||||
## Available commands
|
## Available commands
|
||||||
|
|
||||||
@@ -80,73 +37,31 @@ The current command dispatcher includes these built-ins:
|
|||||||
- `PATHDEL`
|
- `PATHDEL`
|
||||||
- `CAPTURE`
|
- `CAPTURE`
|
||||||
- `ENDCAP`
|
- `ENDCAP`
|
||||||
- `SLIST`
|
|
||||||
- `NDIR`
|
|
||||||
- `FLAG`
|
|
||||||
- `FLAGDIR`
|
|
||||||
- `RIGHTS`
|
|
||||||
- `GRANT`
|
|
||||||
- `REVOKE`
|
|
||||||
- `REMOVE`
|
|
||||||
- `DEBUG`
|
- `DEBUG`
|
||||||
- `ECHO`
|
- `ECHO`
|
||||||
- `CD`
|
- `CD`
|
||||||
- `TESTS` developer/testing only
|
- `TESTS` (developer/testing only)
|
||||||
|
|
||||||
The CMake install rules also install the multi-call `net.exe` under several of those command names.
|
`SLIST` is present in the historical build/install metadata, but the command is disabled in the dispatcher and the provided `slist.c` is only a stub in this source snapshot.
|
||||||
|
|
||||||
## How it works
|
## How it works
|
||||||
|
|
||||||
The program resolves the command from either:
|
The program resolves the command from either:
|
||||||
|
|
||||||
1. the executable name itself, or
|
1. the executable name itself, or
|
||||||
2. the first command-line argument.
|
2. the first command-line argument
|
||||||
|
|
||||||
That means all of the following styles are valid:
|
That means all of the following styles are valid:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
NET LOGIN alice secret
|
NET LOGIN alice secret
|
||||||
NET MAP F:=SYS:
|
NET MAP F:=SYS:
|
||||||
NET FLAG LOGIN.EXE
|
|
||||||
LOGIN.EXE alice secret
|
LOGIN.EXE alice secret
|
||||||
MAP.EXE F:=SYS:
|
MAP.EXE F:=SYS:
|
||||||
FLAG.EXE LOGIN.EXE A
|
|
||||||
CAPTURE.EXE LPT1 Q1
|
CAPTURE.EXE LPT1 Q1
|
||||||
```
|
```
|
||||||
|
|
||||||
## NCP requester and API layers
|
This is one of the key design ideas of the project, and the original README specifically recommends copying or linking `net.exe` to `login.exe` for convenience.
|
||||||
|
|
||||||
The modern NCP support is split into small layers so protocol code and
|
|
||||||
requester transport code stay separate:
|
|
||||||
|
|
||||||
- `ncpapi.c` / `ncpapi.h` contain the named `ncpXX_YY_*` protocol API wrappers.
|
|
||||||
- `ncpcall.c` contains lower-level requester and Client32 transport helpers.
|
|
||||||
- `ncp.asm` / `ncp.h` provide the INT 21h `Net_Call` and Client32 requester entry points.
|
|
||||||
- `ipx.asm` / `ipx.h` provide the remaining IPX socket and far-memory assembly glue.
|
|
||||||
|
|
||||||
The validated Client32 sequence is:
|
|
||||||
|
|
||||||
```text
|
|
||||||
ncp_mapvar_request(4,0)
|
|
||||||
-> obtains the active connection reference
|
|
||||||
|
|
||||||
ncp_openref_request()
|
|
||||||
-> opens that reference and returns a Client32 handle
|
|
||||||
|
|
||||||
ncp_raw_request()
|
|
||||||
-> sends NCP 87 requests through COMPATNcpRequestReply
|
|
||||||
```
|
|
||||||
|
|
||||||
This path is currently used by:
|
|
||||||
|
|
||||||
- `FLAG`
|
|
||||||
- `FLAGDIR`
|
|
||||||
- `RIGHTS`
|
|
||||||
- `GRANT`
|
|
||||||
- `REVOKE`
|
|
||||||
- `REMOVE`
|
|
||||||
|
|
||||||
The old `Net_Call` / INT 21h requester path is kept as a fallback where appropriate, but Client32-backed raw NCP requests are now preferred for the validated FLAG-family and trustee operations.
|
|
||||||
|
|
||||||
## Command reference
|
## Command reference
|
||||||
|
|
||||||
@@ -177,7 +92,10 @@ Change a user password.
|
|||||||
PASSWD [user]
|
PASSWD [user]
|
||||||
```
|
```
|
||||||
|
|
||||||
If no username is supplied, the tool attempts to resolve the currently logged-in user. The password-change code prefers the encrypted/keyed flow where available and keeps older unencrypted calls as fallback.
|
Notes:
|
||||||
|
|
||||||
|
- If no username is supplied, the tool attempts to resolve the currently logged-in user. fileciteturn1file2L162-L190
|
||||||
|
- The source comments note that password changes currently use the older unencrypted password-change call.
|
||||||
|
|
||||||
### `PROFILE`
|
### `PROFILE`
|
||||||
|
|
||||||
@@ -187,7 +105,7 @@ Execute a command script.
|
|||||||
PROFILE <filename>
|
PROFILE <filename>
|
||||||
```
|
```
|
||||||
|
|
||||||
The command reader parses non-empty lines, ignores `#` comments, uppercases the command token, and dispatches it through the same internal command table used for direct invocation. `ECHO` is treated specially so the rest of the line is preserved as a single string.
|
This is a central part of the workflow. The command reader parses non-empty lines, ignores `#` comments, uppercases the command token, and dispatches it through the same internal command table used for direct invocation. `ECHO` is treated specially so the rest of the line is preserved as a single string.
|
||||||
|
|
||||||
### `SPAWN`
|
### `SPAWN`
|
||||||
|
|
||||||
@@ -239,7 +157,7 @@ List or set a search-path entry.
|
|||||||
PATH sn:[=[path]]
|
PATH sn:[=[path]]
|
||||||
```
|
```
|
||||||
|
|
||||||
Where `sn` is `s1` through `s16`.
|
Where `sn` is `s1` through `s16`. The original documentation notes that this updates the path environment rather than directly creating a drive mapping.
|
||||||
|
|
||||||
### `PATHINS`
|
### `PATHINS`
|
||||||
|
|
||||||
@@ -293,265 +211,6 @@ Example:
|
|||||||
ENDCAP LPT1
|
ENDCAP LPT1
|
||||||
```
|
```
|
||||||
|
|
||||||
### `SLIST`
|
|
||||||
|
|
||||||
List known NetWare file servers.
|
|
||||||
|
|
||||||
Typical usage:
|
|
||||||
|
|
||||||
```text
|
|
||||||
SLIST [server] [/Continue]
|
|
||||||
```
|
|
||||||
|
|
||||||
The current `slist.c` implementation scans bindery file server objects and prints known servers.
|
|
||||||
|
|
||||||
### `FLAG`
|
|
||||||
|
|
||||||
Display or modify NetWare DOS file attributes.
|
|
||||||
|
|
||||||
Typical usage:
|
|
||||||
|
|
||||||
```text
|
|
||||||
FLAG file [option...]
|
|
||||||
```
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
```text
|
|
||||||
FLAG LOGIN.EXE
|
|
||||||
FLAG LOGIN.EXE A
|
|
||||||
FLAG LOGIN.EXE -A
|
|
||||||
FLAG LOGIN.EXE P T DI RI CI RA WA
|
|
||||||
FLAG LOGIN.EXE N
|
|
||||||
FLAG LOGIN.EXE ALL
|
|
||||||
FLAG LOGIN.EXE RO
|
|
||||||
FLAG LOGIN.EXE RW
|
|
||||||
```
|
|
||||||
|
|
||||||
Supported attributes and aliases include:
|
|
||||||
|
|
||||||
- `RO`
|
|
||||||
- `RW`
|
|
||||||
- `S`
|
|
||||||
- `A`
|
|
||||||
- `H`
|
|
||||||
- `SY`, `SYS`, `SYSTEM`
|
|
||||||
- `T`
|
|
||||||
- `P`
|
|
||||||
- `RA`
|
|
||||||
- `WA`
|
|
||||||
- `CI`
|
|
||||||
- `DI`
|
|
||||||
- `RI`
|
|
||||||
- `ALL`
|
|
||||||
- `N` / `NORMAL`
|
|
||||||
|
|
||||||
The output is intentionally close to Novell FLAG formatting:
|
|
||||||
|
|
||||||
```text
|
|
||||||
Ro/Rw S/- A/- - H/- Sy/-- T/- P/- Ra/-- Wa/-- CI/-- DI/-- RI/--
|
|
||||||
```
|
|
||||||
|
|
||||||
The Client32 path handles both low and high NetWare attribute bits. High bits such as `P`, `DI`, `RI`, `CI`, `RA`, and `WA` must be handled as 32-bit values in 16-bit DOS builds.
|
|
||||||
|
|
||||||
### `FLAGDIR`
|
|
||||||
|
|
||||||
Display or modify NetWare directory attributes.
|
|
||||||
|
|
||||||
Typical usage:
|
|
||||||
|
|
||||||
```text
|
|
||||||
FLAGDIR [path [option...]]
|
|
||||||
```
|
|
||||||
|
|
||||||
Supported 386-style options:
|
|
||||||
|
|
||||||
- `Normal`
|
|
||||||
- `System`
|
|
||||||
- `Hidden`
|
|
||||||
- `DeleteInhibit`
|
|
||||||
- `Purge`
|
|
||||||
- `RenameInhibit`
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
```text
|
|
||||||
FLAGDIR UDIR
|
|
||||||
FLAGDIR UDIR SYSTEM
|
|
||||||
FLAGDIR UDIR HIDDEN
|
|
||||||
FLAGDIR UDIR DELETEINHIBIT
|
|
||||||
FLAGDIR UDIR PURGE
|
|
||||||
FLAGDIR UDIR RENAMEINHIBIT
|
|
||||||
FLAGDIR UDIR NORMAL
|
|
||||||
```
|
|
||||||
|
|
||||||
For simple mapped paths, the display is kept close to Novell FLAGDIR style:
|
|
||||||
|
|
||||||
```text
|
|
||||||
MARS/SYS:UDIR
|
|
||||||
UDIR System Hidden DeleteInhibit Purge RenameInhibit
|
|
||||||
```
|
|
||||||
|
|
||||||
`Private` is intentionally rejected for the current NetWare 386-style path.
|
|
||||||
|
|
||||||
|
|
||||||
### `RIGHTS`
|
|
||||||
|
|
||||||
Display effective NetWare rights for a file or directory.
|
|
||||||
|
|
||||||
Typical usage:
|
|
||||||
|
|
||||||
```text
|
|
||||||
RIGHTS [path]
|
|
||||||
```
|
|
||||||
|
|
||||||
Supported:
|
|
||||||
|
|
||||||
- directory paths
|
|
||||||
- file paths
|
|
||||||
- Novell-like display of the effective rights mask
|
|
||||||
|
|
||||||
Rights are shown in the traditional order:
|
|
||||||
|
|
||||||
```text
|
|
||||||
S R W C E M F A
|
|
||||||
Supervisor, Read, Write, Create, Erase, Modify, File scan, Access Control
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### `GRANT`
|
|
||||||
|
|
||||||
Assign explicit trustee rights to a user or group.
|
|
||||||
|
|
||||||
Typical usage:
|
|
||||||
|
|
||||||
```text
|
|
||||||
GRANT rightslist* [FOR path] TO [USER | GROUP] name [options]
|
|
||||||
Options: /SubDirectories | /Files
|
|
||||||
```
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
```text
|
|
||||||
GRANT R W C FOR UDIR TO USER MARIO
|
|
||||||
GRANT ALL FOR UDIR TO GROUP EVERYONE /SUBDIRECTORIES
|
|
||||||
GRANT R F FOR UDIR\*.TST TO USER MARIO /FILES
|
|
||||||
```
|
|
||||||
|
|
||||||
Supported 386-style rights:
|
|
||||||
|
|
||||||
- `ALL`
|
|
||||||
- `N` / `NONE`
|
|
||||||
- `S` / `SUPERVISOR`
|
|
||||||
- `R` / `READ`
|
|
||||||
- `W` / `WRITE`
|
|
||||||
- `C` / `CREATE`
|
|
||||||
- `E` / `ERASE`
|
|
||||||
- `M` / `MODIFY`
|
|
||||||
- `F` / `FILESCAN`
|
|
||||||
- `A` / `ACCESS CONTROL`
|
|
||||||
|
|
||||||
For Novell compatibility, `ALL` grants the normal trustee rights (`RWCEMFA`) and does not imply Supervisor; use `S` explicitly when Supervisor rights are intended.
|
|
||||||
|
|
||||||
### `REVOKE`
|
|
||||||
|
|
||||||
Remove selected rights from an explicit trustee assignment.
|
|
||||||
|
|
||||||
Typical usage:
|
|
||||||
|
|
||||||
```text
|
|
||||||
REVOKE rightslist* [FOR path] FROM [USER|GROUP] name [options]
|
|
||||||
Options: /SubDirectories | /Files
|
|
||||||
```
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
```text
|
|
||||||
REVOKE W M FOR UDIR FROM USER MARIO
|
|
||||||
REVOKE R W FOR UDIR\*.TST FROM GROUP EVERYONE /FILES
|
|
||||||
REVOKE W C FOR UDIR FROM USER MARIO /SUBDIRECTORIES
|
|
||||||
```
|
|
||||||
|
|
||||||
`REVOKE` scans the explicit trustee assignment first, subtracts the requested rights, and deletes the trustee entry when no rights remain. Missing trustee entries are reported in Novell style:
|
|
||||||
|
|
||||||
```text
|
|
||||||
No trustee for the specified directory.
|
|
||||||
No trustee for the specified file.
|
|
||||||
```
|
|
||||||
|
|
||||||
### `REMOVE`
|
|
||||||
|
|
||||||
Delete an explicit trustee assignment for a user or group.
|
|
||||||
|
|
||||||
Typical usage:
|
|
||||||
|
|
||||||
```text
|
|
||||||
REMOVE [USER | GROUP] name [FROM path] [option]
|
|
||||||
Options: /Subdirs | /Files
|
|
||||||
```
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
```text
|
|
||||||
REMOVE USER MARIO FROM UDIR
|
|
||||||
REMOVE GROUP EVERYONE FROM UDIR /SUBDIRS
|
|
||||||
REMOVE USER MARIO FROM UDIR\*.TST /FILES
|
|
||||||
```
|
|
||||||
|
|
||||||
If `USER` or `GROUP` is omitted, the tool tries to resolve the name as a user first and then as a group. Successful multi-object operations print Novell-style summaries such as:
|
|
||||||
|
|
||||||
```text
|
|
||||||
Trustee "MARIO" removed from 4 directories.
|
|
||||||
Trustee "MARIO" removed from 2 files.
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### `NDIR`
|
|
||||||
|
|
||||||
List files and directories in a NetWare-style format.
|
|
||||||
|
|
||||||
Typical usage:
|
|
||||||
|
|
||||||
```text
|
|
||||||
NDIR [path] [/option...]
|
|
||||||
```
|
|
||||||
|
|
||||||
The implementation supports basic DOS namespace listings, wildcards,
|
|
||||||
paging, first rights and dates displays, and these options:
|
|
||||||
|
|
||||||
- `/FO` or `FO` for files only
|
|
||||||
- `/DO` or `DO` for directories only
|
|
||||||
- `/CONTINUOUS`, `/CONTINUE`, or `/C` for continuous output
|
|
||||||
- `/RIGHTS` for a first effective-rights display
|
|
||||||
- `/DATES` for Novell-style date columns with current DOS timestamp data
|
|
||||||
- `/SUB` or `/SUBDIRECTORIES` for recursive directory listings
|
|
||||||
- `/SHORT` or `/BRIEF` for compact output, useful with `/SUB`
|
|
||||||
- `/HELP` for Novell-style usage text
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
```text
|
|
||||||
NDIR
|
|
||||||
NDIR *.EXE
|
|
||||||
NDIR PUBLIC\*.EXE
|
|
||||||
NDIR PUBLIC /DO
|
|
||||||
NDIR PUBLIC\*.EXE /FO /CONTINUOUS
|
|
||||||
NDIR PUBLIC /RIGHTS
|
|
||||||
NDIR PUBLIC /DATES
|
|
||||||
NDIR PUBLIC /SUB
|
|
||||||
NDIR PUBLIC /SUB /SHORT
|
|
||||||
NDIR PUBLIC /DO
|
|
||||||
```
|
|
||||||
|
|
||||||
The first version intentionally focuses on the common listing path. More
|
|
||||||
advanced Novell NDIR features such as sorting and restrictions are accepted
|
|
||||||
only as future compatibility points or will be implemented in later revisions. The `/RIGHTS` display uses NCP87 information for inherited rights and
|
|
||||||
Client32 effective-rights calls for effective rights. The `/DATES` display
|
|
||||||
uses NCP87 DOS info fields when available and falls back to DOS findfirst
|
|
||||||
timestamps otherwise.
|
|
||||||
|
|
||||||
|
|
||||||
### `DEBUG`
|
### `DEBUG`
|
||||||
|
|
||||||
Set mars_nwe debug levels for selected server-side modules.
|
Set mars_nwe debug levels for selected server-side modules.
|
||||||
@@ -561,7 +220,7 @@ DEBUG NCPSERV|NWCONN|NWBIND level
|
|||||||
```
|
```
|
||||||
|
|
||||||
- `level` must be between `0` and `99`.
|
- `level` must be between `0` and `99`.
|
||||||
- This requires the matching mars_nwe server-side debug call to be enabled.
|
- The original docs say this requires `FUNC_17_02_IS_DEBUG` to be enabled in `mars_nwe/config.h`.
|
||||||
|
|
||||||
### `ECHO`
|
### `ECHO`
|
||||||
|
|
||||||
@@ -575,19 +234,9 @@ Change the current DOS directory. It also adjusts the active drive if a drive-qu
|
|||||||
|
|
||||||
Internal developer test routines. Not intended as a regular end-user command.
|
Internal developer test routines. Not intended as a regular end-user command.
|
||||||
|
|
||||||
The currently useful Client32 test is:
|
|
||||||
|
|
||||||
```text
|
|
||||||
TESTS NCP87C32ATTR
|
|
||||||
```
|
|
||||||
|
|
||||||
It verifies the working Client32 NCP87 attribute path.
|
|
||||||
|
|
||||||
## Login script workflow
|
## Login script workflow
|
||||||
|
|
||||||
A particularly important feature is the automatic execution of a file named `login` located beside the executable after a successful login.
|
A particularly important feature is the automatic execution of a file named `login` located beside the executable after a successful login. The historical README gives this example:
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```text
|
```text
|
||||||
map f:=SYS:
|
map f:=SYS:
|
||||||
@@ -604,7 +253,7 @@ This makes the tool suite useful not just for authentication, but for setting up
|
|||||||
|
|
||||||
### Historical DOS build
|
### Historical DOS build
|
||||||
|
|
||||||
The included `makefile.bcc` is the primary historical build file and targets Borland C / Borland tools on DOS.
|
The included `makefile.bcc` is the primary historical build file and targets **Borland C / Borland tools** on DOS.
|
||||||
|
|
||||||
Key settings from the makefile:
|
Key settings from the makefile:
|
||||||
|
|
||||||
@@ -615,42 +264,29 @@ Key settings from the makefile:
|
|||||||
- define: `-Dmsdos`
|
- define: `-Dmsdos`
|
||||||
- output: `net.exe`
|
- output: `net.exe`
|
||||||
|
|
||||||
The historical object list includes the original C sources plus `kern.asm`.
|
The object list includes:
|
||||||
|
|
||||||
### CMake / Open Watcom maintainer build
|
- `net.c`
|
||||||
|
- `tools.c`
|
||||||
|
- `netcall.c`
|
||||||
|
- `ncpcall.c`
|
||||||
|
- `login.c`
|
||||||
|
- `map.c`
|
||||||
|
- `slist.c`
|
||||||
|
- `nwcrypt.c`
|
||||||
|
- `nwdebug.c`
|
||||||
|
- `nwtests.c`
|
||||||
|
- `capture.c`
|
||||||
|
- `kern.asm`
|
||||||
|
|
||||||
The modern CMake build can rebuild `net.exe` with Open Watcom v2 on Linux.
|
|
||||||
|
|
||||||
Configure with:
|
### CMake status
|
||||||
|
|
||||||
```bash
|
A `CMakeLists.txt` is present, but in this snapshot it is only a **partial modern build description**. It defines include paths, version-related macros, and install rules, while the actual `add_executable(...)` line is still commented out. That means it is better understood as packaging metadata than a ready-to-use complete build system.
|
||||||
cmake -S . -B build -DMARS_NWE_BUILD_DOSUTILS=ON
|
|
||||||
cmake --build build
|
|
||||||
```
|
|
||||||
|
|
||||||
The CMake build:
|
|
||||||
|
|
||||||
- assembles `ipx.asm` and `ncp.asm` with `wasm`
|
|
||||||
- compiles each C file to a binary-directory `.obj`
|
|
||||||
- links `net.exe` from those binary-directory objects
|
|
||||||
- keeps `.obj`/`.o` intermediate files out of the source directory
|
|
||||||
|
|
||||||
If old object files were produced in the source tree by an earlier build, remove them once:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd dosutils
|
|
||||||
rm -f *.o *.obj
|
|
||||||
```
|
|
||||||
|
|
||||||
### Default install behavior
|
|
||||||
|
|
||||||
When `MARS_NWE_BUILD_DOSUTILS` is disabled, CMake installs a prebuilt `net.exe` from the source tree.
|
|
||||||
|
|
||||||
That keeps the normal mars_nwe build independent from Open Watcom. Maintainers can enable the Open Watcom build only when they want to regenerate the DOS binary.
|
|
||||||
|
|
||||||
## Installation layout
|
## Installation layout
|
||||||
|
|
||||||
The install rules deploy the same binary multiple times into `SYS/public`, including:
|
The CMake install rules deploy the same binary multiple times into `SYS/public`:
|
||||||
|
|
||||||
- `net.exe`
|
- `net.exe`
|
||||||
- `login.exe`
|
- `login.exe`
|
||||||
@@ -664,41 +300,19 @@ The install rules deploy the same binary multiple times into `SYS/public`, inclu
|
|||||||
- `mapdel.exe`
|
- `mapdel.exe`
|
||||||
- `logout.exe`
|
- `logout.exe`
|
||||||
- `slist.exe`
|
- `slist.exe`
|
||||||
- `ndir.exe`
|
|
||||||
- `flag.exe`
|
|
||||||
- `flagdir.exe`
|
|
||||||
- `rights.exe`
|
|
||||||
- `grant.exe`
|
|
||||||
- `revoke.exe`
|
|
||||||
- `remove.exe`
|
|
||||||
- `capture.exe`
|
- `capture.exe`
|
||||||
- `endcap.exe`
|
- `endcap.exe`
|
||||||
|
|
||||||
They also install selected copies such as `login.exe`, `map.exe`, and `slist.exe` into `SYS/login` where appropriate.
|
They also install minimal `login.exe` and `map.exe` copies into `SYS/login`.
|
||||||
|
|
||||||
## Development notes
|
|
||||||
|
|
||||||
- `ipx.asm`/`ipx.h` provide the split 16-bit Open Watcom IPX and far-memory assembly glue.
|
|
||||||
- `ncp.asm`/`ncp.h` provide the split 16-bit Open Watcom requester assembly entry points.
|
|
||||||
- `ncpcall.c` contains low-level NCP requester/transport helpers.
|
|
||||||
- `ncpapi.c`/`ncpapi.h` contain reusable `ncpXX_YY_*` protocol API wrappers for DOS tools.
|
|
||||||
- `trustee.c` and `trustee.h` contain shared Rights/Trustee code for `GRANT`, `REVOKE`, and `REMOVE`.
|
|
||||||
- `tools.c` contains shared command/frontend helpers so future smaller multicall binaries can reuse common parsing and path code.
|
|
||||||
- The verified Client32 path uses NCP 87 subfunction 6 for obtaining DOS information, subfunction 7 for modifying DOS information, subfunction 29 for effective rights, and trustee scan/add/delete calls for the trustee tools.
|
|
||||||
- For modify operations, use the modify information mask `DM_ATTRIBUTES` (`0x00000002`) rather than the read-side `RIM_ATTRIBUTES` mask.
|
|
||||||
- High NetWare attributes must be stored and displayed as 32-bit values even in 16-bit DOS builds.
|
|
||||||
|
|
||||||
## Project status and limitations
|
## Project status and limitations
|
||||||
|
|
||||||
This is legacy DOS networking code from the mid-1990s, and a few caveats are worth keeping in mind:
|
This is legacy DOS networking code from the mid-1990s, and a few caveats are worth keeping in mind:
|
||||||
|
|
||||||
- The code is tightly coupled to DOS, IPX/NCP behavior, and mars_nwe/NetWare requester semantics.
|
- The original README explicitly says the program was still incomplete.
|
||||||
- Client32 support has been validated for the FLAG-family and trustee/right tools, but not yet generalized to every command.
|
- `SLIST` is not implemented in the provided source snapshot.
|
||||||
- DOSX/VLM/NETX fallback testing is still pending.
|
- Parts of the authentication and password-change path still rely on older unencrypted operations when the newer keyed flow is unavailable or disabled.
|
||||||
- `FLAGDIR` currently focuses on the NetWare 386-style attributes and simple mapped directory paths.
|
- The code is tightly coupled to DOS, IPX/NCP behavior, and mars_nwe-specific expectations.
|
||||||
- OS/2 requester behavior is still future work.
|
|
||||||
- Some authentication and password-change paths still keep older calls as compatibility fallbacks.
|
|
||||||
- `NCOPY` is still built so it stays compile-tested, but it is intentionally not registered in the `NET` multicall dispatcher while the NCP87/OpenCreate -> NCP74 server-side copy path remains under investigation.
|
|
||||||
|
|
||||||
## Historical metadata
|
## Historical metadata
|
||||||
|
|
||||||
@@ -711,19 +325,7 @@ From the included project metadata:
|
|||||||
- platforms: `DOS`, `DOSEMU`
|
- platforms: `DOS`, `DOSEMU`
|
||||||
- author/maintainer: Martin Stover
|
- author/maintainer: Martin Stover
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
The source tree includes a root-level `COPYING` file with the GPL-2 license text. Source files carry GPL-2-or-later headers and preserve the original Martin Stover attribution for the historical mars_nwe utility code, with current maintenance attribution where appropriate.
|
No standalone license file is included in the provided snapshot. The source files do contain copyright notices naming **Martin Stover**. Anyone planning to redistribute or modernize the project should verify licensing status before publishing derivative releases.
|
||||||
|
|
||||||
|
|
||||||
Debug/test helpers:
|
|
||||||
|
|
||||||
```
|
|
||||||
TESTS EFFRIGHT path
|
|
||||||
```
|
|
||||||
|
|
||||||
Prints the effective-rights values returned by several Client32/NCP paths for comparison with Novell RIGHTS.
|
|
||||||
|
|
||||||
`TESTS EFFRIGHT path` also prints exploratory old NCP22 effective-rights call variants for comparing with Novell RIGHTS.
|
|
||||||
|
|
||||||
`TESTS EFFRIGHT path` additionally tests NCP22 subfunction 50 object effective rights using the current login object id.
|
|
||||||
|
|||||||
27
capture.c
27
capture.c
@@ -1,27 +1,8 @@
|
|||||||
/*
|
/* capture.c 05-Apr-96 */
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
* Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/****************************************************************
|
||||||
* Purpose: CAPTURE-compatible DOS utility entry point for printer capture handling.
|
* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany *
|
||||||
* Depends on: net.h, net.c multicall dispatch, netcall.c requester helpers, tools.c shared utility routines.
|
****************************************************************/
|
||||||
*/
|
|
||||||
|
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
|
||||||
|
|||||||
580
creator.c
580
creator.c
@@ -1,580 +0,0 @@
|
|||||||
/*
|
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: CREATOR utility for showing and changing NetWare file creator/owner metadata.
|
|
||||||
* Depends on: net.h, ncpapi.h, netcall.c requester helpers, ncpapi.c namespace/NCP helpers, tools.c shared utility routines.
|
|
||||||
*/
|
|
||||||
/* creator.c - friendly creator/modifier/archiver metadata test tool
|
|
||||||
*
|
|
||||||
* Uses the same NCP 22/25 Set Directory/File Information path as Novell
|
|
||||||
* FILER for the special fileinfo/archive metadata fields. This is intended
|
|
||||||
* for testing mars_nwe xattr-backed metadata without using the FILER GUI.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "net.h"
|
|
||||||
#include "ncpapi.h"
|
|
||||||
|
|
||||||
#define DM_CREATE_DATE 0x00000004UL
|
|
||||||
#define DM_CREATE_TIME 0x00000008UL
|
|
||||||
#define DM_CREATOR_ID 0x00000010UL
|
|
||||||
#define DM_ARCHIVE_DATE 0x00000020UL
|
|
||||||
#define DM_ARCHIVE_TIME 0x00000040UL
|
|
||||||
#define DM_ARCHIVER_ID 0x00000080UL
|
|
||||||
#define DM_MODIFY_DATE 0x00000100UL
|
|
||||||
#define DM_MODIFY_TIME 0x00000200UL
|
|
||||||
#define DM_MODIFIER_ID 0x00000400UL
|
|
||||||
|
|
||||||
#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");
|
|
||||||
fprintf(stdout, " CREATOR file /SHOW\n");
|
|
||||||
fprintf(stdout, " CREATOR file /CREATOR user-or-hexid\n");
|
|
||||||
fprintf(stdout, " CREATOR file /MODIFIER user-or-hexid\n");
|
|
||||||
fprintf(stdout, " CREATOR file /ARCHIVER user-or-hexid\n");
|
|
||||||
fprintf(stdout, " CREATOR file /CREATE user-or-hexid [yyyy-mm-dd [hh:mm:ss]]\n");
|
|
||||||
fprintf(stdout, " CREATOR file /MODIFY user-or-hexid [yyyy-mm-dd [hh:mm:ss]]\n");
|
|
||||||
fprintf(stdout, " CREATOR file /ARCHIVE user-or-hexid [yyyy-mm-dd [hh:mm:ss]]\n");
|
|
||||||
fprintf(stdout, " CREATOR file /ALL user-or-hexid [yyyy-mm-dd [hh:mm:ss]]\n");
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
fprintf(stdout, "Examples:\n");
|
|
||||||
fprintf(stdout, " CREATOR F:\\CIXTEST\\SUP\\S_SUP.TXT /SHOW\n");
|
|
||||||
fprintf(stdout, " CREATOR F:\\CIXTEST\\SUP\\S_SUP.TXT /CREATOR MARIO\n");
|
|
||||||
fprintf(stdout, " CREATOR F:\\CIXTEST\\SUP\\S_SUP.TXT /ARCHIVE MARIO\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static int hex_value(int c)
|
|
||||||
{
|
|
||||||
if (c >= '0' && c <= '9') return(c - '0');
|
|
||||||
if (c >= 'a' && c <= 'f') return(c - 'a' + 10);
|
|
||||||
if (c >= 'A' && c <= 'F') return(c - 'A' + 10);
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int parse_hex32(char *s, uint32 *out)
|
|
||||||
{
|
|
||||||
uint32 value = 0;
|
|
||||||
int i;
|
|
||||||
int v;
|
|
||||||
|
|
||||||
if (!s || !*s || !out)
|
|
||||||
return(-1);
|
|
||||||
if (s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) {
|
|
||||||
s += 2;
|
|
||||||
if (!*s) return(-1);
|
|
||||||
}
|
|
||||||
for (i = 0; s[i]; i++) {
|
|
||||||
v = hex_value(s[i]);
|
|
||||||
if (v < 0) return(-1);
|
|
||||||
value = (value << 4) | (uint32)v;
|
|
||||||
}
|
|
||||||
*out = value;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint32 lookup_object_id(char *name)
|
|
||||||
{
|
|
||||||
uint32 id;
|
|
||||||
uint8 namebuf[48];
|
|
||||||
|
|
||||||
if (!name || !*name)
|
|
||||||
return(0);
|
|
||||||
|
|
||||||
if (!parse_hex32(name, &id))
|
|
||||||
return(id);
|
|
||||||
|
|
||||||
strmaxcpy(namebuf, name, sizeof(namebuf) - 1);
|
|
||||||
upstr(namebuf);
|
|
||||||
id = ncp17_35_get_bindery_object_id(namebuf, BINDERY_USER);
|
|
||||||
if (id)
|
|
||||||
return(id);
|
|
||||||
id = ncp17_35_get_bindery_object_id(namebuf, BINDERY_GROUP);
|
|
||||||
return(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int parse_uint(char *s, int *out)
|
|
||||||
{
|
|
||||||
int v = 0;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!s || !*s || !out)
|
|
||||||
return(-1);
|
|
||||||
for (i = 0; s[i]; i++) {
|
|
||||||
if (s[i] < '0' || s[i] > '9') return(-1);
|
|
||||||
v = v * 10 + (s[i] - '0');
|
|
||||||
}
|
|
||||||
*out = v;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint16 make_dos_date(int year, int month, int day)
|
|
||||||
{
|
|
||||||
if (year < 80)
|
|
||||||
year += 2000;
|
|
||||||
if (year < 1980)
|
|
||||||
year = 1980;
|
|
||||||
return((uint16)(((year - 1980) << 9) | (month << 5) | day));
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint16 make_dos_time(int hour, int min, int sec)
|
|
||||||
{
|
|
||||||
return((uint16)((hour << 11) | (min << 5) | (sec / 2)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void current_dos_datetime(uint16 *date_out, uint16 *time_out)
|
|
||||||
{
|
|
||||||
REGS regs;
|
|
||||||
int year;
|
|
||||||
int month;
|
|
||||||
int day;
|
|
||||||
int hour;
|
|
||||||
int min;
|
|
||||||
int sec;
|
|
||||||
|
|
||||||
regs.h.ah = 0x2a;
|
|
||||||
int86(0x21, ®s, ®s);
|
|
||||||
year = regs.x.cx;
|
|
||||||
month = regs.h.dh;
|
|
||||||
day = regs.h.dl;
|
|
||||||
|
|
||||||
regs.h.ah = 0x2c;
|
|
||||||
int86(0x21, ®s, ®s);
|
|
||||||
hour = regs.h.ch;
|
|
||||||
min = regs.h.cl;
|
|
||||||
sec = regs.h.dh;
|
|
||||||
|
|
||||||
if (date_out) *date_out = make_dos_date(year, month, day);
|
|
||||||
if (time_out) *time_out = make_dos_time(hour, min, sec);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int parse_date_arg(char *s, uint16 *date_out)
|
|
||||||
{
|
|
||||||
char buf[32];
|
|
||||||
char *p1;
|
|
||||||
char *p2;
|
|
||||||
int y;
|
|
||||||
int m;
|
|
||||||
int d;
|
|
||||||
uint32 hex;
|
|
||||||
|
|
||||||
if (!s || !date_out)
|
|
||||||
return(-1);
|
|
||||||
if (!parse_hex32(s, &hex) && (s[0] == '0' || strlen(s) <= 4)) {
|
|
||||||
*date_out = (uint16)hex;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
strmaxcpy(buf, s, sizeof(buf)-1);
|
|
||||||
p1 = strchr(buf, '-');
|
|
||||||
if (!p1) p1 = strchr(buf, '.');
|
|
||||||
if (!p1) return(-1);
|
|
||||||
*p1++ = '\0';
|
|
||||||
p2 = strchr(p1, '-');
|
|
||||||
if (!p2) p2 = strchr(p1, '.');
|
|
||||||
if (!p2) return(-1);
|
|
||||||
*p2++ = '\0';
|
|
||||||
|
|
||||||
if (parse_uint(buf, &y) || parse_uint(p1, &m) || parse_uint(p2, &d))
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
/* Support both yyyy-mm-dd and dd.mm.yy. */
|
|
||||||
if (y < 100 && d > 100) {
|
|
||||||
int tmp = y;
|
|
||||||
y = d;
|
|
||||||
d = tmp;
|
|
||||||
}
|
|
||||||
if (y < 100) y += 2000;
|
|
||||||
if (m < 1 || m > 12 || d < 1 || d > 31)
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
*date_out = make_dos_date(y, m, d);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int parse_time_arg(char *s, uint16 *time_out)
|
|
||||||
{
|
|
||||||
char buf[32];
|
|
||||||
char *p1;
|
|
||||||
char *p2;
|
|
||||||
int h;
|
|
||||||
int m;
|
|
||||||
int sec = 0;
|
|
||||||
uint32 hex;
|
|
||||||
|
|
||||||
if (!s || !time_out)
|
|
||||||
return(-1);
|
|
||||||
if (!parse_hex32(s, &hex) && (s[0] == '0' || strlen(s) <= 4)) {
|
|
||||||
*time_out = (uint16)hex;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
strmaxcpy(buf, s, sizeof(buf)-1);
|
|
||||||
p1 = strchr(buf, ':');
|
|
||||||
if (!p1) return(-1);
|
|
||||||
*p1++ = '\0';
|
|
||||||
p2 = strchr(p1, ':');
|
|
||||||
if (p2) *p2++ = '\0';
|
|
||||||
|
|
||||||
if (parse_uint(buf, &h) || parse_uint(p1, &m))
|
|
||||||
return(-1);
|
|
||||||
if (p2 && parse_uint(p2, &sec))
|
|
||||||
return(-1);
|
|
||||||
if (h < 0 || h > 23 || m < 0 || m > 59 || sec < 0 || sec > 59)
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
*time_out = make_dos_time(h, m, sec);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void print_dos_date(uint16 date)
|
|
||||||
{
|
|
||||||
int year = ((date >> 9) & 0x7f) + 1980;
|
|
||||||
int month = (date >> 5) & 0x0f;
|
|
||||||
int day = date & 0x1f;
|
|
||||||
fprintf(stdout, "%04d-%02d-%02d", year, month, day);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void print_dos_time(uint16 time)
|
|
||||||
{
|
|
||||||
int hour = (time >> 11) & 0x1f;
|
|
||||||
int min = (time >> 5) & 0x3f;
|
|
||||||
int sec = (time & 0x1f) * 2;
|
|
||||||
fprintf(stdout, "%02d:%02d:%02d", hour, min, sec);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int split_path(char *path, char *parent, int parent_size, char *name, int name_size)
|
|
||||||
{
|
|
||||||
char tmp[260];
|
|
||||||
char *p;
|
|
||||||
|
|
||||||
if (!path || !*path || !parent || !name)
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
strmaxcpy(tmp, path, sizeof(tmp)-1);
|
|
||||||
korrpath(tmp);
|
|
||||||
p = strrchr(tmp, '\\');
|
|
||||||
if (!p) p = strrchr(tmp, '/');
|
|
||||||
|
|
||||||
if (p) {
|
|
||||||
*p++ = '\0';
|
|
||||||
strmaxcpy(parent, tmp, parent_size-1);
|
|
||||||
strmaxcpy(name, p, name_size-1);
|
|
||||||
} else {
|
|
||||||
parent[0] = '\0';
|
|
||||||
strmaxcpy(name, tmp, name_size-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!name[0]) return(-1);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int set_info(uint8 dhandle, char *name, uint32 bits,
|
|
||||||
uint16 cdate, uint16 ctime, uint32 cid,
|
|
||||||
uint16 adate, uint16 atime, uint32 aid,
|
|
||||||
uint16 mdate, uint16 mtime, uint32 mid)
|
|
||||||
{
|
|
||||||
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 created_time[2];
|
|
||||||
uint8 created_date[2];
|
|
||||||
uint8 created_id[4];
|
|
||||||
uint8 archived_time[2];
|
|
||||||
uint8 archived_date[2];
|
|
||||||
uint8 archived_id[4];
|
|
||||||
uint8 updated_time[2];
|
|
||||||
uint8 updated_date[2];
|
|
||||||
uint8 updated_id[4];
|
|
||||||
uint8 rest[80];
|
|
||||||
} req;
|
|
||||||
struct { uint16 len; } repl;
|
|
||||||
|
|
||||||
memset(&req, 0, sizeof(req));
|
|
||||||
memset(&repl, 0, sizeof(repl));
|
|
||||||
|
|
||||||
req.func = 0x25;
|
|
||||||
req.dirhandle = dhandle;
|
|
||||||
req.search_attributes = 0x06;
|
|
||||||
U32_TO_BE32(0xffffffffUL, req.searchsequence);
|
|
||||||
U32_TO_32(bits, req.change_bits);
|
|
||||||
|
|
||||||
U16_TO_16(ctime, req.created_time);
|
|
||||||
U16_TO_16(cdate, req.created_date);
|
|
||||||
U32_TO_BE32(cid, req.created_id);
|
|
||||||
U16_TO_16(atime, req.archived_time);
|
|
||||||
U16_TO_16(adate, req.archived_date);
|
|
||||||
U32_TO_BE32(aid, req.archived_id);
|
|
||||||
U16_TO_16(mtime, req.updated_time);
|
|
||||||
U16_TO_16(mdate, req.updated_date);
|
|
||||||
U32_TO_BE32(mid, req.updated_id);
|
|
||||||
|
|
||||||
if (tool_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(-neterrno);
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
NCP_NDIR_INFO info;
|
|
||||||
int rc;
|
|
||||||
char attr_text[24];
|
|
||||||
char rights_text[12];
|
|
||||||
|
|
||||||
memset(&info, 0, sizeof(info));
|
|
||||||
rc = ncp87_06_obtain_ndir_info(tool_is_current_path(name) ? "" : name,
|
|
||||||
(uint16)dhandle,
|
|
||||||
&info,
|
|
||||||
NULL, NULL, NULL);
|
|
||||||
if (rc) {
|
|
||||||
fprintf(stdout, "CREATOR: obtain info failed for %s, rc=%d\n", name, rc);
|
|
||||||
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: %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);
|
|
||||||
fprintf(stdout, "Modify: "); print_dos_date(info.modify_date);
|
|
||||||
fprintf(stdout, " "); print_dos_time(info.modify_time);
|
|
||||||
fprintf(stdout, " modifier=0x%08lX\n", (unsigned long)info.modifier_id);
|
|
||||||
fprintf(stdout, "Archive: "); print_dos_date(info.archive_date);
|
|
||||||
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: %s (0x%04X)\n", rights_text, (unsigned)info.inherited_rights);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int func_creator(int argc, char *argv[], int mode)
|
|
||||||
{
|
|
||||||
char oldcwd[260];
|
|
||||||
char parent[260];
|
|
||||||
char name[64];
|
|
||||||
char *path;
|
|
||||||
char *cmd;
|
|
||||||
char *id_arg;
|
|
||||||
uint8 dhandle = 0;
|
|
||||||
uint32 id = 0;
|
|
||||||
uint16 date;
|
|
||||||
uint16 time;
|
|
||||||
uint32 bits = 0;
|
|
||||||
int rc = 0;
|
|
||||||
int need_id = 0;
|
|
||||||
|
|
||||||
(void)mode;
|
|
||||||
|
|
||||||
if (argc < 3) {
|
|
||||||
creator_usage();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
path = argv[1];
|
|
||||||
cmd = argv[2];
|
|
||||||
upstr(cmd);
|
|
||||||
|
|
||||||
if (split_path(path, parent, sizeof(parent), name, sizeof(name))) {
|
|
||||||
fprintf(stdout, "CREATOR: bad path %s\n", path);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!getcwd(oldcwd, sizeof(oldcwd)))
|
|
||||||
oldcwd[0] = '\0';
|
|
||||||
|
|
||||||
if (parent[0] && chdir(parent)) {
|
|
||||||
fprintf(stdout, "CREATOR: cannot change to parent %s\n", parent);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_current_dhandle_only(&dhandle)) {
|
|
||||||
fprintf(stdout, "CREATOR: current drive is not a network drive\n");
|
|
||||||
if (oldcwd[0]) chdir(oldcwd);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcmp(cmd, "/SHOW") || !strcmp(cmd, "SHOW")) {
|
|
||||||
rc = show_info(name, dhandle);
|
|
||||||
if (oldcwd[0]) chdir(oldcwd);
|
|
||||||
return(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
need_id = 1;
|
|
||||||
if (argc < 4) {
|
|
||||||
creator_usage();
|
|
||||||
if (oldcwd[0]) chdir(oldcwd);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
id_arg = argv[3];
|
|
||||||
id = lookup_object_id(id_arg);
|
|
||||||
if (!id) {
|
|
||||||
fprintf(stdout, "CREATOR: object not found: %s\n", id_arg);
|
|
||||||
if (oldcwd[0]) chdir(oldcwd);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
current_dos_datetime(&date, &time);
|
|
||||||
if (argc >= 5 && parse_date_arg(argv[4], &date)) {
|
|
||||||
fprintf(stdout, "CREATOR: bad date '%s'\n", argv[4]);
|
|
||||||
if (oldcwd[0]) chdir(oldcwd);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
if (argc >= 6 && parse_time_arg(argv[5], &time)) {
|
|
||||||
fprintf(stdout, "CREATOR: bad time '%s'\n", argv[5]);
|
|
||||||
if (oldcwd[0]) chdir(oldcwd);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcmp(cmd, "/CREATOR") || !strcmp(cmd, "CREATOR")) {
|
|
||||||
bits = DM_CREATOR_ID;
|
|
||||||
rc = set_info(dhandle, name, bits, 0, 0, id, 0, 0, 0, 0, 0, 0);
|
|
||||||
} else if (!strcmp(cmd, "/MODIFIER") || !strcmp(cmd, "MODIFIER")) {
|
|
||||||
bits = DM_MODIFIER_ID;
|
|
||||||
rc = set_info(dhandle, name, bits, 0, 0, 0, 0, 0, 0, 0, 0, id);
|
|
||||||
} else if (!strcmp(cmd, "/ARCHIVER") || !strcmp(cmd, "ARCHIVER")) {
|
|
||||||
bits = DM_ARCHIVER_ID;
|
|
||||||
rc = set_info(dhandle, name, bits, 0, 0, 0, 0, 0, id, 0, 0, 0);
|
|
||||||
} else if (!strcmp(cmd, "/CREATE") || !strcmp(cmd, "CREATE")) {
|
|
||||||
bits = DM_CREATE_DATE | DM_CREATE_TIME | DM_CREATOR_ID;
|
|
||||||
rc = set_info(dhandle, name, bits, date, time, id, 0, 0, 0, 0, 0, 0);
|
|
||||||
} else if (!strcmp(cmd, "/MODIFY") || !strcmp(cmd, "MODIFY")) {
|
|
||||||
bits = DM_MODIFY_DATE | DM_MODIFY_TIME | DM_MODIFIER_ID;
|
|
||||||
rc = set_info(dhandle, name, bits, 0, 0, 0, 0, 0, 0, date, time, id);
|
|
||||||
} else if (!strcmp(cmd, "/ARCHIVE") || !strcmp(cmd, "ARCHIVE")) {
|
|
||||||
bits = DM_ARCHIVE_DATE | DM_ARCHIVE_TIME | DM_ARCHIVER_ID;
|
|
||||||
rc = set_info(dhandle, name, bits, 0, 0, 0, date, time, id, 0, 0, 0);
|
|
||||||
} else if (!strcmp(cmd, "/ALL") || !strcmp(cmd, "ALL")) {
|
|
||||||
bits = DM_CREATE_DATE | DM_CREATE_TIME | DM_CREATOR_ID |
|
|
||||||
DM_ARCHIVE_DATE | DM_ARCHIVE_TIME | DM_ARCHIVER_ID |
|
|
||||||
DM_MODIFY_DATE | DM_MODIFY_TIME | DM_MODIFIER_ID;
|
|
||||||
rc = set_info(dhandle, name, bits, date, time, id, date, time, id, date, time, id);
|
|
||||||
} else {
|
|
||||||
creator_usage();
|
|
||||||
if (oldcwd[0]) chdir(oldcwd);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rc) {
|
|
||||||
fprintf(stdout, "CREATOR: NCP22/25 set info failed for %s, rc=%d neterrno=0x%02X\n",
|
|
||||||
path, rc, (unsigned)(rc < 0 ? -rc : 0));
|
|
||||||
} else {
|
|
||||||
fprintf(stdout, "CREATOR: set %s on %s to 0x%08lX OK\n",
|
|
||||||
cmd, path, (unsigned long)id);
|
|
||||||
if (bits & (DM_CREATE_DATE | DM_MODIFY_DATE | DM_ARCHIVE_DATE)) {
|
|
||||||
fprintf(stdout, "CREATOR: date/time "); print_dos_date(date);
|
|
||||||
fprintf(stdout, " "); print_dos_time(time); fprintf(stdout, "\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!rc)
|
|
||||||
show_info(name, dhandle);
|
|
||||||
|
|
||||||
if (oldcwd[0]) chdir(oldcwd);
|
|
||||||
return(rc ? rc : 0);
|
|
||||||
}
|
|
||||||
196
dlystrt.c
196
dlystrt.c
@@ -1,196 +0,0 @@
|
|||||||
/*
|
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: Small DOS delayed-start helper used by the utility set.
|
|
||||||
* Depends on: DOS/Open Watcom runtime headers only; it is independent from the NetWare helper modules.
|
|
||||||
*/
|
|
||||||
/* dlystrt.c - maintainer-only delayed DOS command starter.
|
|
||||||
*
|
|
||||||
* This is a tiny TSR helper for login/logout tests. It waits a short
|
|
||||||
* time, then stuffs a command line into the BIOS keyboard buffer. The
|
|
||||||
* command is therefore executed by the command processor after the batch
|
|
||||||
* file that installed DLYSTRT has already returned to the DOS prompt.
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
* DLYSTRT /T:2 C:\\LGNTC.BAT
|
|
||||||
*
|
|
||||||
* The tool is intended for MAINTAINER_BUILD only and is not installed in
|
|
||||||
* normal builds.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <dos.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <i86.h>
|
|
||||||
|
|
||||||
#ifndef MAINTAINER_BUILD
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
puts("DLYSTRT is only available in maintainer builds.");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define MAX_CMD 126
|
|
||||||
#define BIOS_SEG 0x0040
|
|
||||||
#define KB_HEAD 0x001a
|
|
||||||
#define KB_TAIL 0x001c
|
|
||||||
#define KB_BUF 0x001e
|
|
||||||
#define KB_END 0x003e
|
|
||||||
|
|
||||||
typedef void (__interrupt __far *intr_fn)(void);
|
|
||||||
|
|
||||||
static intr_fn old_int1c;
|
|
||||||
static volatile unsigned wait_ticks;
|
|
||||||
static volatile unsigned pos;
|
|
||||||
static volatile unsigned done;
|
|
||||||
static char command[MAX_CMD + 3];
|
|
||||||
|
|
||||||
static int strnicmp_local(const char *a, const char *b, int n)
|
|
||||||
{
|
|
||||||
int ca, cb;
|
|
||||||
while (n-- > 0) {
|
|
||||||
ca = toupper((unsigned char)*a++);
|
|
||||||
cb = toupper((unsigned char)*b++);
|
|
||||||
if (ca != cb || ca == 0 || cb == 0) return ca - cb;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int kb_put_char(char ch)
|
|
||||||
{
|
|
||||||
unsigned far *headp = (unsigned far *)MK_FP(BIOS_SEG, KB_HEAD);
|
|
||||||
unsigned far *tailp = (unsigned far *)MK_FP(BIOS_SEG, KB_TAIL);
|
|
||||||
unsigned far *bufp;
|
|
||||||
unsigned head = *headp;
|
|
||||||
unsigned tail = *tailp;
|
|
||||||
unsigned next = tail + 2;
|
|
||||||
|
|
||||||
if (next >= KB_END) next = KB_BUF;
|
|
||||||
if (next == head) return 0; /* keyboard buffer full */
|
|
||||||
|
|
||||||
bufp = (unsigned far *)MK_FP(BIOS_SEG, tail);
|
|
||||||
*bufp = (unsigned)((unsigned char)ch); /* scan code 0, ASCII ch */
|
|
||||||
*tailp = next;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void raw_restore_vector(void)
|
|
||||||
{
|
|
||||||
intr_fn __far *vecp;
|
|
||||||
|
|
||||||
if (!old_int1c) return;
|
|
||||||
|
|
||||||
/* Do not call DOS from the timer interrupt. Restore the IVT entry
|
|
||||||
* directly, then leave the TSR out of the interrupt path before the
|
|
||||||
* delayed command is executed.
|
|
||||||
*/
|
|
||||||
_disable();
|
|
||||||
vecp = (intr_fn __far *)MK_FP(0x0000, 0x1c * 4);
|
|
||||||
*vecp = old_int1c;
|
|
||||||
_enable();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __interrupt __far dly_int1c(void)
|
|
||||||
{
|
|
||||||
intr_fn prev = old_int1c;
|
|
||||||
|
|
||||||
if (!done) {
|
|
||||||
if (wait_ticks) {
|
|
||||||
wait_ticks--;
|
|
||||||
} else {
|
|
||||||
if (command[pos]) {
|
|
||||||
if (kb_put_char(command[pos])) pos++;
|
|
||||||
} else {
|
|
||||||
/* One-shot: unhook before pressing Enter so the command that gets
|
|
||||||
* started by COMMAND.COM runs without DLYSTRT still sitting on INT 1Ch.
|
|
||||||
*/
|
|
||||||
done = 1;
|
|
||||||
raw_restore_vector();
|
|
||||||
kb_put_char('\r');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (prev) prev();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void usage(void)
|
|
||||||
{
|
|
||||||
puts("Usage: DLYSTRT [/T:seconds] command [args]");
|
|
||||||
puts("Maintainer helper: delay-start a command after returning to DOS.");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void build_command(int argc, char **argv, int first)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
command[0] = '\0';
|
|
||||||
for (i = first; i < argc; i++) {
|
|
||||||
if (command[0]) strncat(command, " ", MAX_CMD - strlen(command));
|
|
||||||
strncat(command, argv[i], MAX_CMD - strlen(command));
|
|
||||||
}
|
|
||||||
command[MAX_CMD] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
unsigned seconds = 2;
|
|
||||||
int first = 1;
|
|
||||||
unsigned paras;
|
|
||||||
|
|
||||||
if (argc < 2) {
|
|
||||||
usage();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strnicmp_local(argv[first], "/T:", 3)) {
|
|
||||||
seconds = (unsigned)atoi(argv[first] + 3);
|
|
||||||
if (seconds == 0) seconds = 1;
|
|
||||||
first++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (first >= argc) {
|
|
||||||
usage();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
build_command(argc, argv, first);
|
|
||||||
wait_ticks = seconds * 18;
|
|
||||||
pos = 0;
|
|
||||||
done = 0;
|
|
||||||
|
|
||||||
old_int1c = _dos_getvect(0x1c);
|
|
||||||
_dos_setvect(0x1c, dly_int1c);
|
|
||||||
|
|
||||||
printf("DLYSTRT installed: %s\n", command);
|
|
||||||
|
|
||||||
/* Keep a small fixed amount resident. This maintainer helper is tiny;
|
|
||||||
* 256 paragraphs = 4 KiB is enough for code, data and the command buffer
|
|
||||||
* in the small DOS model used here.
|
|
||||||
*/
|
|
||||||
paras = 256;
|
|
||||||
_dos_keep(0, paras);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* MAINTAINER_BUILD */
|
|
||||||
0
doc/README
Normal file → Executable file
0
doc/README
Normal file → Executable file
690
flag.c
690
flag.c
@@ -1,690 +0,0 @@
|
|||||||
/*
|
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: FLAG utility for displaying and changing NetWare DOS file attributes.
|
|
||||||
* Depends on: net.h, ncpapi.h, netcall.c requester helpers, ncpapi.c namespace/NCP helpers, tools.c shared utility routines.
|
|
||||||
*/
|
|
||||||
/* flag.c - Novell FLAG-like DOS utility, stage 1 */
|
|
||||||
|
|
||||||
#include "net.h"
|
|
||||||
#include "ncpapi.h"
|
|
||||||
#include <dos.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* FLAG v4b: NCP 87 namespace DOS info.
|
|
||||||
*
|
|
||||||
* ncpfs reference:
|
|
||||||
* ncp_ns_modify_entry_dos_info():
|
|
||||||
* subfunction 7, namespace DOS, search attrs SA_ALL,
|
|
||||||
* ModifyInformationMask, struct ncp_dos_info, handle/path.
|
|
||||||
*
|
|
||||||
* We use dirstyle=0 (short directory handle) against the current DOS
|
|
||||||
* directory handle and a one-component DOS filename.
|
|
||||||
*/
|
|
||||||
#define FLAG_NW_NS_DOS 0x00
|
|
||||||
#define FLAG_SA_ALL 0x0006
|
|
||||||
#define FLAG_RIM_ATTRIBUTES 0x00000004UL
|
|
||||||
#define FLAG_DM_ATTRIBUTES 0x00000002UL
|
|
||||||
|
|
||||||
#define NWFA_RO 0x00000001UL
|
|
||||||
#define NWFA_H 0x00000002UL
|
|
||||||
#define NWFA_SY 0x00000004UL
|
|
||||||
#define NWFA_A 0x00000020UL
|
|
||||||
#define NWFA_S 0x00000080UL
|
|
||||||
#define NWFA_T 0x00001000UL
|
|
||||||
#define NWFA_RA 0x00004000UL
|
|
||||||
#define NWFA_WA 0x00008000UL
|
|
||||||
#define NWFA_P 0x00010000UL
|
|
||||||
#define NWFA_RI 0x00020000UL
|
|
||||||
#define NWFA_DI 0x00040000UL
|
|
||||||
#define NWFA_CI 0x00080000UL
|
|
||||||
|
|
||||||
|
|
||||||
static int flag_add_handle_path(uint8 *p, uint8 dhandle, char *name)
|
|
||||||
{
|
|
||||||
int nlen;
|
|
||||||
|
|
||||||
nlen = strlen(name);
|
|
||||||
if (nlen > 255) nlen = 255;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* handle/path:
|
|
||||||
* volume/handle byte
|
|
||||||
* dir base dword
|
|
||||||
* dirstyle byte (0 = short dir handle)
|
|
||||||
* path components: 1 component, length, bytes
|
|
||||||
*/
|
|
||||||
*p++ = dhandle;
|
|
||||||
tool_put_dword_lh(p, 0L); p += 4;
|
|
||||||
*p++ = 0; /* dirstyle = handle */
|
|
||||||
*p++ = 1; /* one path component */
|
|
||||||
*p++ = (uint8)nlen;
|
|
||||||
memcpy(p, name, nlen);
|
|
||||||
p += nlen;
|
|
||||||
|
|
||||||
return(1 + 4 + 1 + 1 + 1 + nlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flag_ncp87_obtain_attrs(char *name, uint32 *attrs)
|
|
||||||
{
|
|
||||||
struct {
|
|
||||||
uint16 len;
|
|
||||||
uint8 data[320];
|
|
||||||
} req;
|
|
||||||
struct {
|
|
||||||
uint16 len;
|
|
||||||
uint8 data[128];
|
|
||||||
} repl;
|
|
||||||
uint8 connid = 0;
|
|
||||||
uint8 dhandle = 0;
|
|
||||||
uint8 *p;
|
|
||||||
int hlen;
|
|
||||||
|
|
||||||
if (tool_current_dhandle(&connid, &dhandle))
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Prefer the verified Client32 NCP87 path. If it is not available,
|
|
||||||
* fall back to the historical INT 21h/Net_Call path below.
|
|
||||||
*/
|
|
||||||
if (ncp87_06_obtain_rim_attributes(name, (uint16)dhandle,
|
|
||||||
attrs, NULL, NULL, NULL) == 0)
|
|
||||||
return(0);
|
|
||||||
|
|
||||||
memset(&req, 0, sizeof(req));
|
|
||||||
memset(&repl, 0, sizeof(repl));
|
|
||||||
|
|
||||||
p = req.data;
|
|
||||||
*p++ = 6; /* subfunction: obtain file/subdir info */
|
|
||||||
*p++ = FLAG_NW_NS_DOS; /* source namespace */
|
|
||||||
*p++ = FLAG_NW_NS_DOS; /* target namespace */
|
|
||||||
tool_put_word_lh(p, FLAG_SA_ALL); p += 2;
|
|
||||||
tool_put_dword_lh(p, FLAG_RIM_ATTRIBUTES); p += 4;
|
|
||||||
hlen = flag_add_handle_path(p, dhandle, name);
|
|
||||||
p += hlen;
|
|
||||||
|
|
||||||
req.len = (uint16)(p - req.data);
|
|
||||||
repl.len = sizeof(repl.data);
|
|
||||||
|
|
||||||
neterrno = Net_Call(0xF257, &req, &repl);
|
|
||||||
if (neterrno)
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* With RIM_ATTRIBUTES only, ncpfs expects NSI_Attributes first.
|
|
||||||
* First dword is the 32-bit Attributes field.
|
|
||||||
*/
|
|
||||||
if (attrs)
|
|
||||||
*attrs = tool_get_dword_lh(repl.data);
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int flag_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 (tool_copy_ncp22_name(req.name, name, &namlen))
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
req.func = 0x1e; /* Scan directory */
|
|
||||||
req.dirhandle = dhandle;
|
|
||||||
req.search_attributes = 0x06; /* hidden/system */
|
|
||||||
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:
|
|
||||||
* dword searchsequence
|
|
||||||
* dword subdir
|
|
||||||
* dword attributes
|
|
||||||
* ...
|
|
||||||
*/
|
|
||||||
if (attrs)
|
|
||||||
*attrs = tool_get_dword_lh(repl.data + 8);
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flag_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 = 0x06; /* hidden/system */
|
|
||||||
U32_TO_BE32(0xffffffffUL, req.searchsequence);
|
|
||||||
U32_TO_32(FLAG_DM_ATTRIBUTES, req.change_bits);
|
|
||||||
U32_TO_32(attrs, req.attributes);
|
|
||||||
|
|
||||||
if (tool_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 int flag_obtain_attrs(char *name, uint32 *attrs)
|
|
||||||
{
|
|
||||||
if (!flag_ncp22_1e_obtain_attrs(name, attrs))
|
|
||||||
return(0);
|
|
||||||
|
|
||||||
return(flag_ncp87_obtain_attrs(name, attrs));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flag_ncp87_modify_attrs(char *name, uint32 attrs)
|
|
||||||
{
|
|
||||||
struct {
|
|
||||||
uint16 len;
|
|
||||||
uint8 data[384];
|
|
||||||
} req;
|
|
||||||
struct {
|
|
||||||
uint16 len;
|
|
||||||
uint8 data[8];
|
|
||||||
} repl;
|
|
||||||
uint8 connid = 0;
|
|
||||||
uint8 dhandle = 0;
|
|
||||||
uint8 *p;
|
|
||||||
int hlen;
|
|
||||||
|
|
||||||
if (tool_current_dhandle(&connid, &dhandle))
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Prefer verified Client32 modify path. The old INT 21h/F257 modify path
|
|
||||||
* can hang under DOS Client32 for high FLAG bits such as T/P/DI/RI.
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
uint16 actual = 0;
|
|
||||||
uint16 hlo = 0;
|
|
||||||
uint16 hhi = 0;
|
|
||||||
if (!ncp87_07_modify_dos_attributes(name, (uint16)dhandle, attrs,
|
|
||||||
&actual, &hlo, &hhi))
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(&req, 0, sizeof(req));
|
|
||||||
memset(&repl, 0, sizeof(repl));
|
|
||||||
|
|
||||||
p = req.data;
|
|
||||||
*p++ = 7; /* subfunction: modify DOS info */
|
|
||||||
*p++ = FLAG_NW_NS_DOS;
|
|
||||||
*p++ = 0; /* reserved */
|
|
||||||
tool_put_word_lh(p, FLAG_SA_ALL); p += 2;
|
|
||||||
|
|
||||||
tool_put_dword_lh(p, FLAG_DM_ATTRIBUTES); p += 4; /* modify mask: DM_ATTRIBUTES */
|
|
||||||
tool_put_dword_lh(p, attrs); p += 4; /* Attributes */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Remaining ncp_dos_info fields. Mask says only Attributes is valid,
|
|
||||||
* so these should be ignored, but ncpfs still sends the full structure.
|
|
||||||
*/
|
|
||||||
memset(p, 0, 34);
|
|
||||||
p += 34;
|
|
||||||
|
|
||||||
hlen = flag_add_handle_path(p, dhandle, name);
|
|
||||||
p += hlen;
|
|
||||||
|
|
||||||
req.len = (uint16)(p - req.data);
|
|
||||||
repl.len = sizeof(repl.data);
|
|
||||||
|
|
||||||
neterrno = Net_Call(0xF257, &req, &repl);
|
|
||||||
if (neterrno)
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _A_NORMAL
|
|
||||||
#define _A_NORMAL 0x00
|
|
||||||
#endif
|
|
||||||
#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
|
|
||||||
|
|
||||||
static void flag_help(void)
|
|
||||||
{
|
|
||||||
fprintf(stdout, "USAGE: FLAG [path [ option | [+|-] attribute(s) ] [SUB]]\n");
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
fprintf(stdout, "386 Attributes:\n");
|
|
||||||
fprintf(stdout, "--------------\n");
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
fprintf(stdout, "RO Read Only\n");
|
|
||||||
fprintf(stdout, "RW Read Write\n");
|
|
||||||
fprintf(stdout, "S Sharable\n");
|
|
||||||
fprintf(stdout, "H Hidden\n");
|
|
||||||
fprintf(stdout, "Sy System\n");
|
|
||||||
fprintf(stdout, "T Transactional\n");
|
|
||||||
fprintf(stdout, "P Purge\n");
|
|
||||||
fprintf(stdout, "A Archive Needed\n");
|
|
||||||
fprintf(stdout, "RA Read Audit\n");
|
|
||||||
fprintf(stdout, "WA Write Audit\n");
|
|
||||||
fprintf(stdout, "CI Copy Inhibit\n");
|
|
||||||
fprintf(stdout, "DI Delete Inhibit\n");
|
|
||||||
fprintf(stdout, "RI Rename Inhibit\n");
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
fprintf(stdout, "All All\n");
|
|
||||||
fprintf(stdout, "N Normal\n");
|
|
||||||
fprintf(stdout, "SUB\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flag_attr_mask(char *s, uint32 *setbits, uint32 *clearbits)
|
|
||||||
{
|
|
||||||
int set = 1;
|
|
||||||
char *p = s;
|
|
||||||
|
|
||||||
if (*p == '+') {
|
|
||||||
set = 1;
|
|
||||||
p++;
|
|
||||||
} else if (*p == '-') {
|
|
||||||
set = 0;
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!*p) return(-1);
|
|
||||||
|
|
||||||
if (tool_strsame(p, "RO")) {
|
|
||||||
if (set) {
|
|
||||||
*setbits |= (NWFA_RO | NWFA_DI | NWFA_RI);
|
|
||||||
} else {
|
|
||||||
*clearbits |= (NWFA_RO | NWFA_DI | NWFA_RI);
|
|
||||||
}
|
|
||||||
} else if (tool_strsame(p, "RW")) {
|
|
||||||
*clearbits |= (NWFA_RO | NWFA_DI | NWFA_RI);
|
|
||||||
} else if (tool_strsame(p, "S")) {
|
|
||||||
if (set) *setbits |= NWFA_S;
|
|
||||||
else *clearbits |= NWFA_S;
|
|
||||||
} else if (tool_strsame(p, "H")) {
|
|
||||||
if (set) *setbits |= NWFA_H;
|
|
||||||
else *clearbits |= NWFA_H;
|
|
||||||
} else if (tool_strsame(p, "SY") || tool_strsame(p, "SYS") || tool_strsame(p, "SYSTEM")) {
|
|
||||||
if (set) *setbits |= NWFA_SY;
|
|
||||||
else *clearbits |= NWFA_SY;
|
|
||||||
} else if (tool_strsame(p, "T")) {
|
|
||||||
if (set) *setbits |= NWFA_T;
|
|
||||||
else *clearbits |= NWFA_T;
|
|
||||||
} else if (tool_strsame(p, "P")) {
|
|
||||||
if (set) *setbits |= NWFA_P;
|
|
||||||
else *clearbits |= NWFA_P;
|
|
||||||
} else if (tool_strsame(p, "A")) {
|
|
||||||
if (set) *setbits |= NWFA_A;
|
|
||||||
else *clearbits |= NWFA_A;
|
|
||||||
} else if (tool_strsame(p, "RA")) {
|
|
||||||
if (set) *setbits |= NWFA_RA;
|
|
||||||
else *clearbits |= NWFA_RA;
|
|
||||||
} else if (tool_strsame(p, "WA")) {
|
|
||||||
if (set) *setbits |= NWFA_WA;
|
|
||||||
else *clearbits |= NWFA_WA;
|
|
||||||
} else if (tool_strsame(p, "CI")) {
|
|
||||||
if (set) *setbits |= NWFA_CI;
|
|
||||||
else *clearbits |= NWFA_CI;
|
|
||||||
} else if (tool_strsame(p, "DI")) {
|
|
||||||
if (set) *setbits |= NWFA_DI;
|
|
||||||
else *clearbits |= NWFA_DI;
|
|
||||||
} else if (tool_strsame(p, "RI")) {
|
|
||||||
if (set) *setbits |= NWFA_RI;
|
|
||||||
else *clearbits |= NWFA_RI;
|
|
||||||
} else if (tool_strsame(p, "N") || tool_strsame(p, "NORMAL")) {
|
|
||||||
*clearbits |= (NWFA_RO | NWFA_H | NWFA_SY | NWFA_A |
|
|
||||||
NWFA_S | NWFA_T | NWFA_P |
|
|
||||||
NWFA_RA | NWFA_WA | NWFA_CI | NWFA_DI | NWFA_RI);
|
|
||||||
} else if (tool_strsame(p, "ALL")) {
|
|
||||||
*setbits |= (NWFA_RO | NWFA_H | NWFA_SY | NWFA_A |
|
|
||||||
NWFA_S | NWFA_T | NWFA_P |
|
|
||||||
NWFA_RA | NWFA_WA | NWFA_CI | NWFA_DI | NWFA_RI);
|
|
||||||
} else {
|
|
||||||
fprintf(stderr, "Unknown attribute encountered in command line.\n");
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void flag_print_attrs(uint32 attr)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Novell order:
|
|
||||||
* Ro/Rw S A - H Sy T P Ra Wa CI DI RI
|
|
||||||
*/
|
|
||||||
fprintf(stdout, "[ ");
|
|
||||||
fprintf(stdout, "%s ", (attr & NWFA_RO) ? "Ro" : "Rw");
|
|
||||||
fprintf(stdout, "%c ", (attr & NWFA_S) ? 'S' : '-');
|
|
||||||
fprintf(stdout, "%c ", (attr & NWFA_A) ? 'A' : '-');
|
|
||||||
fprintf(stdout, "- ");
|
|
||||||
fprintf(stdout, "%c ", (attr & NWFA_H) ? 'H' : '-');
|
|
||||||
fprintf(stdout, "%s ", (attr & NWFA_SY) ? "Sy" : "--");
|
|
||||||
fprintf(stdout, "%c ", (attr & NWFA_T) ? 'T' : '-');
|
|
||||||
fprintf(stdout, "%c ", (attr & NWFA_P) ? 'P' : '-');
|
|
||||||
fprintf(stdout, "%s ", (attr & NWFA_RA) ? "Ra" : "--");
|
|
||||||
fprintf(stdout, "%s ", (attr & NWFA_WA) ? "Wa" : "--");
|
|
||||||
fprintf(stdout, "%s ", (attr & NWFA_CI) ? "CI" : "--");
|
|
||||||
fprintf(stdout, "%s ", (attr & NWFA_DI) ? "DI" : "--");
|
|
||||||
fprintf(stdout, "%s ", (attr & NWFA_RI) ? "RI" : "--");
|
|
||||||
fprintf(stdout, "]");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void flag_display_one(char *name, uint32 attr)
|
|
||||||
{
|
|
||||||
fprintf(stdout, " %-23s ", name);
|
|
||||||
flag_print_attrs(attr);
|
|
||||||
fprintf(stdout, " \n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void flag_display_one_paged(char *name, uint32 attr,
|
|
||||||
int *line_count, int *continuous)
|
|
||||||
{
|
|
||||||
flag_display_one(name, attr);
|
|
||||||
tool_page_line(line_count, continuous);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static char *flag_last_sep(char *s)
|
|
||||||
{
|
|
||||||
char *last = NULL;
|
|
||||||
char *p;
|
|
||||||
|
|
||||||
for (p = s; *p; p++) {
|
|
||||||
if (*p == '\\' || *p == '/' || *p == ':')
|
|
||||||
last = p;
|
|
||||||
}
|
|
||||||
|
|
||||||
return(last);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void flag_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 = flag_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);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Keep drive-root paths as "F:\" rather than "F:".
|
|
||||||
*/
|
|
||||||
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 flag_enter_parent(char *pattern, char *leaf, int leaf_size,
|
|
||||||
char *oldcwd, int oldcwd_size)
|
|
||||||
{
|
|
||||||
char parent[260];
|
|
||||||
|
|
||||||
oldcwd[0] = '\0';
|
|
||||||
flag_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 flag_leave_parent(char *oldcwd)
|
|
||||||
{
|
|
||||||
if (oldcwd[0])
|
|
||||||
chdir(oldcwd);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int flag_list(char *pattern)
|
|
||||||
{
|
|
||||||
struct find_t ff;
|
|
||||||
unsigned findattr = _A_RDONLY | _A_HIDDEN | _A_SYSTEM | _A_ARCH;
|
|
||||||
int found = 0;
|
|
||||||
int line_count = 0;
|
|
||||||
int continuous = 0;
|
|
||||||
|
|
||||||
if (_dos_findfirst(pattern, findattr, &ff))
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
do {
|
|
||||||
if (!(ff.attrib & _A_SUBDIR)) {
|
|
||||||
uint32 nwattrs;
|
|
||||||
|
|
||||||
if (flag_obtain_attrs(ff.name, &nwattrs))
|
|
||||||
nwattrs = (uint32)ff.attrib;
|
|
||||||
|
|
||||||
flag_display_one_paged(ff.name, nwattrs, &line_count, &continuous);
|
|
||||||
found++;
|
|
||||||
}
|
|
||||||
} while (!_dos_findnext(&ff));
|
|
||||||
|
|
||||||
return(found);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flag_apply(char *pattern, uint32 setbits, uint32 clearbits)
|
|
||||||
{
|
|
||||||
struct find_t ff;
|
|
||||||
unsigned findattr = _A_RDONLY | _A_HIDDEN | _A_SYSTEM | _A_ARCH;
|
|
||||||
int shown = 0;
|
|
||||||
|
|
||||||
if (_dos_findfirst(pattern, findattr, &ff))
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
do {
|
|
||||||
uint32 attrs;
|
|
||||||
uint32 newattrs;
|
|
||||||
char fname[260];
|
|
||||||
|
|
||||||
if (ff.attrib & _A_SUBDIR) continue;
|
|
||||||
|
|
||||||
strmaxcpy(fname, ff.name, sizeof(fname) - 1);
|
|
||||||
|
|
||||||
if (flag_obtain_attrs(fname, &attrs))
|
|
||||||
attrs = (uint32)ff.attrib;
|
|
||||||
|
|
||||||
newattrs = (attrs | (uint32)setbits) & ~((uint32)clearbits);
|
|
||||||
|
|
||||||
if (newattrs != attrs) {
|
|
||||||
if (flag_ncp22_25_modify_attrs(fname, newattrs) &&
|
|
||||||
flag_ncp87_modify_attrs(fname, newattrs)) {
|
|
||||||
unsigned dosattr = (newattrs & (_A_RDONLY|_A_HIDDEN|_A_SYSTEM|_A_ARCH));
|
|
||||||
if (_dos_setfileattr(fname, dosattr)) {
|
|
||||||
fprintf(stdout, "You don't have rights to change : %s\n", fname);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flag_obtain_attrs(fname, &attrs))
|
|
||||||
attrs = newattrs;
|
|
||||||
|
|
||||||
flag_display_one(fname, newattrs);
|
|
||||||
shown++;
|
|
||||||
|
|
||||||
} while (!_dos_findnext(&ff));
|
|
||||||
|
|
||||||
return(shown);
|
|
||||||
}
|
|
||||||
|
|
||||||
int func_flag(int argc, char *argv[], int mode)
|
|
||||||
{
|
|
||||||
char *path = "*.*";
|
|
||||||
int i;
|
|
||||||
uint32 setbits = 0;
|
|
||||||
uint32 clearbits = 0;
|
|
||||||
int have_change = 0;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
(void)mode;
|
|
||||||
|
|
||||||
if (argc > 1 && (tool_strsame(argv[1], "/?") || tool_strsame(argv[1], "-?") ||
|
|
||||||
tool_strsame(argv[1], "?"))) {
|
|
||||||
flag_help();
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc > 1) {
|
|
||||||
path = argv[1];
|
|
||||||
if (tool_strsame(path, "SUB")) path = "*.*";
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 2; i < argc; i++) {
|
|
||||||
if (tool_strsame(argv[i], "SUB")) continue;
|
|
||||||
|
|
||||||
rc = flag_attr_mask(argv[i], &setbits, &clearbits);
|
|
||||||
if (rc < 0) return(1);
|
|
||||||
if (rc > 0) continue;
|
|
||||||
have_change = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
char leaf[260];
|
|
||||||
char oldcwd[260];
|
|
||||||
|
|
||||||
if (flag_enter_parent(path, leaf, sizeof(leaf), oldcwd, sizeof(oldcwd))) {
|
|
||||||
flag_split_pattern(path, oldcwd, sizeof(oldcwd), leaf, sizeof(leaf));
|
|
||||||
fprintf(stdout, "Files could not be found with pattern \"%s\"\a", leaf);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (have_change) {
|
|
||||||
rc = flag_apply(leaf, setbits, clearbits);
|
|
||||||
flag_leave_parent(oldcwd);
|
|
||||||
if (rc < 0) {
|
|
||||||
fprintf(stdout, "Files could not be found with pattern \"%s\"\a", leaf);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = flag_list(leaf);
|
|
||||||
flag_leave_parent(oldcwd);
|
|
||||||
if (rc < 0) {
|
|
||||||
fprintf(stdout, "Files could not be found with pattern \"%s\"\a", leaf);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
584
flagdir.c
584
flagdir.c
@@ -1,584 +0,0 @@
|
|||||||
/*
|
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: FLAGDIR utility for displaying and changing NetWare directory attributes.
|
|
||||||
* Depends on: net.h, ncpapi.h, netcall.c requester helpers, ncpapi.c namespace/NCP helpers, tools.c shared utility routines.
|
|
||||||
*/
|
|
||||||
/* flagdir.c - Novell FLAGDIR-like DOS utility, Client32 version */
|
|
||||||
|
|
||||||
#include "net.h"
|
|
||||||
#include "ncpapi.h"
|
|
||||||
#include <dos.h>
|
|
||||||
#include <direct.h>
|
|
||||||
|
|
||||||
#define FD_NWFA_H 0x00000002UL
|
|
||||||
#define FD_NWFA_SY 0x00000004UL
|
|
||||||
#define FD_NWFA_P 0x00010000UL
|
|
||||||
#define FD_NWFA_RI 0x00020000UL
|
|
||||||
#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
|
|
||||||
#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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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 (tool_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 = tool_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);
|
|
||||||
tool_put_dword_lh(req.attributes, attrs);
|
|
||||||
|
|
||||||
if (tool_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];
|
|
||||||
char *p;
|
|
||||||
|
|
||||||
if (!out || max < 2)
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
out[0] = '\0';
|
|
||||||
path[0] = '\0';
|
|
||||||
|
|
||||||
if (get_dir_path(dhandle, path) || !path[0])
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
p = strchr(path, ':');
|
|
||||||
if (p)
|
|
||||||
p++;
|
|
||||||
else
|
|
||||||
p = path;
|
|
||||||
|
|
||||||
if (!*p)
|
|
||||||
out[0] = '\0';
|
|
||||||
else
|
|
||||||
strmaxcpy(out, p, max - 1);
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void fd_help(void)
|
|
||||||
{
|
|
||||||
fprintf(stdout, "386 Usage: Flagdir [path [option...]]\n");
|
|
||||||
fprintf(stdout, "Options: Normal\n");
|
|
||||||
fprintf(stdout, " System\n");
|
|
||||||
fprintf(stdout, " Hidden\n");
|
|
||||||
fprintf(stdout, " Deleteinhibit\n");
|
|
||||||
fprintf(stdout, " Purge\n");
|
|
||||||
fprintf(stdout, " Renameinhibit\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static int fd_attr_mask(char *s, uint32 *setbits, uint32 *clearbits)
|
|
||||||
{
|
|
||||||
if (tool_strsame(s, "N") || tool_strsame(s, "NORMAL")) {
|
|
||||||
*clearbits |= FD_DIR_BITS;
|
|
||||||
} else if (tool_strsame(s, "S") || tool_strsame(s, "SY") ||
|
|
||||||
tool_strsame(s, "SYS") || tool_strsame(s, "SYSTEM")) {
|
|
||||||
*setbits |= FD_NWFA_SY;
|
|
||||||
} else if (tool_strsame(s, "H") || tool_strsame(s, "HIDDEN")) {
|
|
||||||
*setbits |= FD_NWFA_H;
|
|
||||||
} else if (tool_strsame(s, "DI") || tool_strsame(s, "DELETEINHIBIT")) {
|
|
||||||
*setbits |= FD_NWFA_DI;
|
|
||||||
} else if (tool_strsame(s, "P") || tool_strsame(s, "PURGE")) {
|
|
||||||
*setbits |= FD_NWFA_P;
|
|
||||||
} else if (tool_strsame(s, "RI") || tool_strsame(s, "RENAMEINHIBIT")) {
|
|
||||||
*setbits |= FD_NWFA_RI;
|
|
||||||
} else if (tool_strsame(s, "PRIVATE") || tool_strsame(s, "PR")) {
|
|
||||||
fprintf(stderr, "Private is valid on NetWare 2.15 and above, except NetWare 386.\n");
|
|
||||||
return(-1);
|
|
||||||
} else {
|
|
||||||
fprintf(stderr, "Unknown attribute: %s.\n", s);
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void fd_print_attrs(uint32 attrs)
|
|
||||||
{
|
|
||||||
int any = 0;
|
|
||||||
|
|
||||||
if (!(attrs & FD_DIR_BITS)) {
|
|
||||||
fprintf(stdout, "Normal \n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (attrs & FD_NWFA_SY) {
|
|
||||||
fprintf(stdout, "System");
|
|
||||||
any = 1;
|
|
||||||
}
|
|
||||||
if (attrs & FD_NWFA_H) {
|
|
||||||
fprintf(stdout, "%sHidden", any ? " " : "");
|
|
||||||
any = 1;
|
|
||||||
}
|
|
||||||
if (attrs & FD_NWFA_DI) {
|
|
||||||
fprintf(stdout, "%sDeleteInhibit", any ? " " : "");
|
|
||||||
any = 1;
|
|
||||||
}
|
|
||||||
if (attrs & FD_NWFA_P) {
|
|
||||||
fprintf(stdout, "%sPurge", any ? " " : "");
|
|
||||||
any = 1;
|
|
||||||
}
|
|
||||||
if (attrs & FD_NWFA_RI) {
|
|
||||||
fprintf(stdout, "%sRenameInhibit", any ? " " : "");
|
|
||||||
any = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(stdout, " \n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void fd_display_header(char *path)
|
|
||||||
{
|
|
||||||
char up[260];
|
|
||||||
char prefix[260];
|
|
||||||
char header[300];
|
|
||||||
int len;
|
|
||||||
char *p;
|
|
||||||
|
|
||||||
if (tool_current_prefix(prefix, sizeof(prefix)))
|
|
||||||
prefix[0] = '\0';
|
|
||||||
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
char base[260];
|
|
||||||
|
|
||||||
tool_basename(base, name, sizeof(base));
|
|
||||||
fprintf(stdout, " %-12.12s ", base);
|
|
||||||
fd_print_attrs(attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void fd_display(char *path, uint32 attrs)
|
|
||||||
{
|
|
||||||
fd_display_header(path);
|
|
||||||
fd_display_row(path, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int fd_is_directory(char *path)
|
|
||||||
{
|
|
||||||
struct find_t ff;
|
|
||||||
unsigned attr = _A_RDONLY | _A_HIDDEN | _A_SYSTEM | _A_SUBDIR | _A_ARCH;
|
|
||||||
|
|
||||||
if (tool_is_current_path(path))
|
|
||||||
return(1);
|
|
||||||
|
|
||||||
if (_dos_findfirst(path, attr, &ff))
|
|
||||||
return(0);
|
|
||||||
|
|
||||||
return((ff.attrib & _A_SUBDIR) != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int fd_obtain(char *path, uint8 dhandle, uint32 *attrs)
|
|
||||||
{
|
|
||||||
if (!fd_ncp22_1e_obtain_attrs(path, attrs))
|
|
||||||
return(0);
|
|
||||||
|
|
||||||
if (ncp87_06_obtain_rim_attributes(path, (uint16)dhandle,
|
|
||||||
attrs, NULL, NULL, NULL) == 0)
|
|
||||||
return(0);
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int fd_modify(char *path, uint8 dhandle, uint32 attrs)
|
|
||||||
{
|
|
||||||
if (!fd_ncp22_25_modify_attrs(path, attrs))
|
|
||||||
return(0);
|
|
||||||
|
|
||||||
if (ncp87_07_modify_dos_attributes(path, (uint16)dhandle, attrs,
|
|
||||||
NULL, NULL, NULL) == 0)
|
|
||||||
return(0);
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
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 = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
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] &&
|
|
||||||
!have_change) {
|
|
||||||
attrs = 0;
|
|
||||||
} else {
|
|
||||||
fprintf(stderr, "Unable to get directory attributes.\n");
|
|
||||||
fd_leave_parent(oldcwd);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (have_change) {
|
|
||||||
newattrs = (attrs | setbits) & ~clearbits;
|
|
||||||
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;
|
|
||||||
fd_obtain(ncp_path, dhandle, &attrs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (show_header)
|
|
||||||
fd_display(ncp_path[0] ? ncp_path : display_path, attrs);
|
|
||||||
else
|
|
||||||
fd_display_row(ncp_path[0] ? ncp_path : display_path, attrs);
|
|
||||||
|
|
||||||
fd_leave_parent(oldcwd);
|
|
||||||
return(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int fd_process_wild(char *spec, uint8 dhandle,
|
|
||||||
uint32 setbits, uint32 clearbits,
|
|
||||||
int have_change)
|
|
||||||
{
|
|
||||||
struct find_t ff;
|
|
||||||
char dir[260];
|
|
||||||
char pat[260];
|
|
||||||
char search[260];
|
|
||||||
char full[260];
|
|
||||||
int found = 0;
|
|
||||||
int rc = 0;
|
|
||||||
int lines = 0;
|
|
||||||
int continuous = 0;
|
|
||||||
unsigned attr = _A_RDONLY | _A_HIDDEN | _A_SYSTEM | _A_SUBDIR | _A_ARCH;
|
|
||||||
|
|
||||||
tool_parent_pattern(dir, pat, spec, sizeof(dir), sizeof(pat));
|
|
||||||
tool_join_path(search, dir, pat, sizeof(search));
|
|
||||||
|
|
||||||
if (_dos_findfirst(search, attr, &ff) != 0) {
|
|
||||||
fprintf(stderr, "Directory %s not found.\n", spec);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
fd_display_header(spec);
|
|
||||||
|
|
||||||
do {
|
|
||||||
if ((ff.attrib & _A_SUBDIR) && strcmp(ff.name, ".") &&
|
|
||||||
strcmp(ff.name, "..")) {
|
|
||||||
tool_join_path(full, dir, ff.name, sizeof(full));
|
|
||||||
if (fd_process_one(full, ff.name, dhandle, setbits, clearbits,
|
|
||||||
have_change, 0))
|
|
||||||
rc = 1;
|
|
||||||
found++;
|
|
||||||
tool_page_line(&lines, &continuous);
|
|
||||||
}
|
|
||||||
} while (_dos_findnext(&ff) == 0);
|
|
||||||
|
|
||||||
if (!found) {
|
|
||||||
fprintf(stderr, "Directory %s not found.\n", spec);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
int func_flagdir(int argc, char *argv[], int mode)
|
|
||||||
{
|
|
||||||
char *path = ".";
|
|
||||||
char display_path[260];
|
|
||||||
uint8 connid = 0;
|
|
||||||
uint8 dhandle = 0;
|
|
||||||
uint32 setbits = 0;
|
|
||||||
uint32 clearbits = 0;
|
|
||||||
int have_change = 0;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
(void)mode;
|
|
||||||
|
|
||||||
if (argc > 1 && (tool_strsame(argv[1], "/?") || tool_strsame(argv[1], "-?") ||
|
|
||||||
tool_strsame(argv[1], "?"))) {
|
|
||||||
fd_help();
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc > 1)
|
|
||||||
path = argv[1];
|
|
||||||
|
|
||||||
if (tool_current_dhandle(&connid, &dhandle)) {
|
|
||||||
fprintf(stderr, "FlagDir only works on network directories.\n");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 2; i < argc; i++) {
|
|
||||||
if (fd_attr_mask(argv[i], &setbits, &clearbits))
|
|
||||||
return(1);
|
|
||||||
have_change = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_has_wildcards(path))
|
|
||||||
return(fd_process_wild(path, dhandle, setbits, clearbits, have_change));
|
|
||||||
|
|
||||||
if (tool_is_current_path(path)) {
|
|
||||||
if (fd_current_display_path(dhandle, display_path, sizeof(display_path)))
|
|
||||||
strcpy(display_path, ".");
|
|
||||||
} else {
|
|
||||||
strmaxcpy(display_path, path, sizeof(display_path) - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(fd_process_one(path, display_path, dhandle,
|
|
||||||
setbits, clearbits, have_change, 1));
|
|
||||||
}
|
|
||||||
447
grant.c
447
grant.c
@@ -1,447 +0,0 @@
|
|||||||
/*
|
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: GRANT utility for assigning trustee rights on NetWare directories and files.
|
|
||||||
* Depends on: net.h, ncpapi.h, netcall.c requester helpers, ncpapi.c namespace/NCP helpers, tools.c shared utility routines.
|
|
||||||
*/
|
|
||||||
/* grant.c - Novell GRANT-like DOS utility, first Client32 implementation */
|
|
||||||
|
|
||||||
#include "net.h"
|
|
||||||
#include "ncpapi.h"
|
|
||||||
#include "trustee.h"
|
|
||||||
|
|
||||||
#define GRANT_BINDERY_USER 0x0001
|
|
||||||
#define GRANT_BINDERY_GROUP 0x0002
|
|
||||||
|
|
||||||
#define NCP_RIGHT_READ 0x0001
|
|
||||||
#define NCP_RIGHT_WRITE 0x0002
|
|
||||||
#define NCP_RIGHT_OPEN 0x0004
|
|
||||||
#define NCP_RIGHT_CREATE 0x0008
|
|
||||||
#define NCP_RIGHT_DELETE 0x0010
|
|
||||||
#define NCP_RIGHT_OWNER 0x0020
|
|
||||||
#define NCP_RIGHT_SEARCH 0x0040
|
|
||||||
#define NCP_RIGHT_MODIFY 0x0080
|
|
||||||
#define NCP_RIGHT_SUPER 0x0100
|
|
||||||
|
|
||||||
/* Novell GRANT ALL assigns all normal trustee rights, not Supervisor. */
|
|
||||||
#define NCP_RIGHT_ALL_386 (NCP_RIGHT_READ | NCP_RIGHT_WRITE | \
|
|
||||||
NCP_RIGHT_CREATE | NCP_RIGHT_DELETE | \
|
|
||||||
NCP_RIGHT_MODIFY | NCP_RIGHT_SEARCH | \
|
|
||||||
NCP_RIGHT_OWNER)
|
|
||||||
|
|
||||||
static void grant_usage_error(void)
|
|
||||||
{
|
|
||||||
fprintf(stdout, "Command line arguments violate grammar defined for GRANT.\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void grant_invalid_right_error(void)
|
|
||||||
{
|
|
||||||
fprintf(stdout, "Specified rights unreadable or invalid. Spaces required between each right.\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void grant_usage_ex(int leading_blanks, int bell_after_options,
|
|
||||||
int trailing_blanks)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < leading_blanks; i++)
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
|
|
||||||
fprintf(stdout, "Usage: GRANT rightslist* [FOR path] TO [USER | GROUP] name [options]\n");
|
|
||||||
fprintf(stdout, "Options: /SubDirectories | /Files\n");
|
|
||||||
if (bell_after_options)
|
|
||||||
fprintf(stdout, "\a");
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
fprintf(stdout, "386 Rights:\n");
|
|
||||||
fprintf(stdout, "--------------------\n");
|
|
||||||
fprintf(stdout, "ALL = All\n");
|
|
||||||
fprintf(stdout, "N = No Rights\n");
|
|
||||||
fprintf(stdout, "S = Supervisor\n");
|
|
||||||
fprintf(stdout, "R = Read\n");
|
|
||||||
fprintf(stdout, "W = Write\n");
|
|
||||||
fprintf(stdout, "C = Create\n");
|
|
||||||
fprintf(stdout, "E = Erase\n");
|
|
||||||
fprintf(stdout, "M = Modify\n");
|
|
||||||
fprintf(stdout, "F = File Scan\n");
|
|
||||||
fprintf(stdout, "A = Access Control\n");
|
|
||||||
|
|
||||||
for (i = 0; i < trailing_blanks; i++)
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void grant_usage(void)
|
|
||||||
{
|
|
||||||
grant_usage_ex(0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void grant_usage_help(void)
|
|
||||||
{
|
|
||||||
grant_usage_ex(2, 0, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void grant_usage_after_error(void)
|
|
||||||
{
|
|
||||||
grant_usage_ex(0, 1, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void grant_rights_bracket(uint16 rights, char *out)
|
|
||||||
{
|
|
||||||
/* Novell displays Supervisor as the full effective right mask. */
|
|
||||||
if (rights & NCP_RIGHT_SUPER)
|
|
||||||
rights |= NCP_RIGHT_ALL_386;
|
|
||||||
|
|
||||||
out[0] = (rights & NCP_RIGHT_SUPER) ? 'S' : ' ';
|
|
||||||
out[1] = (rights & NCP_RIGHT_READ) ? 'R' : ' ';
|
|
||||||
out[2] = (rights & NCP_RIGHT_WRITE) ? 'W' : ' ';
|
|
||||||
out[3] = (rights & NCP_RIGHT_CREATE) ? 'C' : ' ';
|
|
||||||
out[4] = (rights & NCP_RIGHT_DELETE) ? 'E' : ' ';
|
|
||||||
out[5] = (rights & NCP_RIGHT_MODIFY) ? 'M' : ' ';
|
|
||||||
out[6] = (rights & NCP_RIGHT_SEARCH) ? 'F' : ' ';
|
|
||||||
out[7] = (rights & NCP_RIGHT_OWNER) ? 'A' : ' ';
|
|
||||||
out[8] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static uint16 grant_expand_supervisor_rights(uint16 rights)
|
|
||||||
{
|
|
||||||
/* Novell GRANT expands Supervisor to the full trustee mask before
|
|
||||||
* storing it. This keeps the wire value and the printed result in
|
|
||||||
* sync with Novell: GRANT S reports and sends [SRWCEMFA], not just
|
|
||||||
* [S ]. */
|
|
||||||
if (rights & NCP_RIGHT_SUPER)
|
|
||||||
rights |= NCP_RIGHT_ALL_386;
|
|
||||||
return(rights);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void grant_rights_string(uint16 rights, char *out)
|
|
||||||
{
|
|
||||||
char *p = out;
|
|
||||||
|
|
||||||
if (rights == 0) {
|
|
||||||
strcpy(out, "N");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((rights & NCP_RIGHT_ALL_386) == NCP_RIGHT_ALL_386) {
|
|
||||||
strcpy(out, "ALL");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rights & NCP_RIGHT_SUPER) *p++ = 'S';
|
|
||||||
if (rights & NCP_RIGHT_READ) *p++ = 'R';
|
|
||||||
if (rights & NCP_RIGHT_WRITE) *p++ = 'W';
|
|
||||||
if (rights & NCP_RIGHT_CREATE) *p++ = 'C';
|
|
||||||
if (rights & NCP_RIGHT_DELETE) *p++ = 'E';
|
|
||||||
if (rights & NCP_RIGHT_MODIFY) *p++ = 'M';
|
|
||||||
if (rights & NCP_RIGHT_SEARCH) *p++ = 'F';
|
|
||||||
if (rights & NCP_RIGHT_OWNER) *p++ = 'A';
|
|
||||||
*p = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
static int grant_add_right_word(char *s, uint16 *rights)
|
|
||||||
{
|
|
||||||
if (tool_strsame(s, "ALL")) {
|
|
||||||
*rights = NCP_RIGHT_ALL_386;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(s, "N") || tool_strsame(s, "NONE")) {
|
|
||||||
*rights = 0;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(s, "S") || tool_strsame(s, "SUPERVISOR")) {
|
|
||||||
*rights |= NCP_RIGHT_SUPER;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(s, "R") || tool_strsame(s, "READ")) {
|
|
||||||
*rights |= NCP_RIGHT_READ;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(s, "W") || tool_strsame(s, "WRITE")) {
|
|
||||||
*rights |= NCP_RIGHT_WRITE;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(s, "C") || tool_strsame(s, "CREATE")) {
|
|
||||||
*rights |= NCP_RIGHT_CREATE;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(s, "E") || tool_strsame(s, "ERASE")) {
|
|
||||||
*rights |= NCP_RIGHT_DELETE;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(s, "M") || tool_strsame(s, "MODIFY")) {
|
|
||||||
*rights |= NCP_RIGHT_MODIFY;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(s, "F") || tool_strsame(s, "FILESCAN") ||
|
|
||||||
tool_strsame(s, "FILE") || tool_strsame(s, "SCAN")) {
|
|
||||||
*rights |= NCP_RIGHT_SEARCH;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(s, "A") || tool_strsame(s, "ACCESS") ||
|
|
||||||
tool_strsame(s, "CONTROL") || tool_strsame(s, "ACCESSCONTROL")) {
|
|
||||||
*rights |= NCP_RIGHT_OWNER;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int grant_last_rc = 0;
|
|
||||||
|
|
||||||
static int grant_set_one(char *path, uint16 dhandle,
|
|
||||||
uint32 object_id, uint16 rights)
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
/* Novell GRANT uses the old NCP22/27 SetTrustee path. Prefer that
|
|
||||||
* path and keep the NCP87 add-trustee call only as a compatibility
|
|
||||||
* fallback for clients/servers that do not accept the old call. */
|
|
||||||
rc = ncp22_27_set_trustee_rights(path, dhandle, object_id, rights);
|
|
||||||
if (rc) {
|
|
||||||
rc = ncp87_0a_add_trustee_rights(path,
|
|
||||||
dhandle,
|
|
||||||
object_id,
|
|
||||||
rights,
|
|
||||||
0xffff,
|
|
||||||
NULL, NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
grant_last_rc = rc;
|
|
||||||
return(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Apply the grant to PATH and every directory below it.
|
|
||||||
*
|
|
||||||
* This intentionally walks through the DOS redirector, not through another
|
|
||||||
* NCP search helper, so it works with the same mapped-drive view that the
|
|
||||||
* user passed to GRANT.
|
|
||||||
*/
|
|
||||||
static int grant_set_subdirs(char *path, uint16 dhandle,
|
|
||||||
uint32 object_id, uint16 rights)
|
|
||||||
{
|
|
||||||
struct find_t ff;
|
|
||||||
char pattern[260];
|
|
||||||
char child[260];
|
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
if (grant_set_one(path, dhandle, object_id, rights))
|
|
||||||
rc = 1;
|
|
||||||
|
|
||||||
tool_join_path(pattern, path, "*.*", sizeof(pattern));
|
|
||||||
|
|
||||||
if (_dos_findfirst(pattern, _A_SUBDIR, &ff) == 0) {
|
|
||||||
do {
|
|
||||||
if ((ff.attrib & _A_SUBDIR) && !tool_is_dot_dir(ff.name)) {
|
|
||||||
tool_join_path(child, path, ff.name, sizeof(child));
|
|
||||||
if (grant_set_subdirs(child, dhandle, object_id, rights))
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
} while (_dos_findnext(&ff) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int func_grant(int argc, char *argv[], int mode)
|
|
||||||
{
|
|
||||||
uint16 rights = 0;
|
|
||||||
char *path = ".";
|
|
||||||
char *objname = NULL;
|
|
||||||
uint16 objtype = GRANT_BINDERY_USER;
|
|
||||||
uint8 connid = 0;
|
|
||||||
uint8 dhandle = 0;
|
|
||||||
uint8 namebuf[48];
|
|
||||||
uint32 object_id;
|
|
||||||
int recurse_subdirs = 0;
|
|
||||||
int i = 1;
|
|
||||||
int have_rights = 0;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
(void)mode;
|
|
||||||
|
|
||||||
if (argc < 2 || tool_is_help_arg(argv[1])) {
|
|
||||||
if (argc < 2) {
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
grant_usage_error();
|
|
||||||
grant_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
grant_usage_help();
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GRANT rightslist* [FOR path] TO [USER|GROUP] name [options]
|
|
||||||
*/
|
|
||||||
while (i < argc) {
|
|
||||||
if (tool_strsame(argv[i], "FOR") || tool_strsame(argv[i], "TO"))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (tool_is_option(argv[i]))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (grant_add_right_word(argv[i], &rights)) {
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
grant_invalid_right_error();
|
|
||||||
grant_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
have_rights = 1;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!have_rights || i >= argc) {
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
grant_usage_error();
|
|
||||||
grant_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(argv[i], "FOR")) {
|
|
||||||
i++;
|
|
||||||
if (i >= argc) {
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
grant_usage_error();
|
|
||||||
grant_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
path = argv[i++];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= argc || !tool_strsame(argv[i], "TO")) {
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
grant_usage_error();
|
|
||||||
grant_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
|
|
||||||
if (i < argc && tool_strsame(argv[i], "USER")) {
|
|
||||||
objtype = GRANT_BINDERY_USER;
|
|
||||||
i++;
|
|
||||||
} else if (i < argc && tool_strsame(argv[i], "GROUP")) {
|
|
||||||
objtype = GRANT_BINDERY_GROUP;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= argc) {
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
grant_usage_error();
|
|
||||||
grant_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
objname = argv[i++];
|
|
||||||
|
|
||||||
while (i < argc) {
|
|
||||||
if (!tool_is_option(argv[i])) {
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
grant_usage_error();
|
|
||||||
grant_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* /FILES is harmless because the explicit path is passed to the
|
|
||||||
* NCP87 trustee-add call. /SUBDIRECTORIES recursively applies the
|
|
||||||
* same grant to all subdirectories below the given path.
|
|
||||||
*/
|
|
||||||
if (tool_strsame(argv[i], "/FILES") || tool_strsame(argv[i], "-FILES") ||
|
|
||||||
tool_strsame(argv[i], "/F") || tool_strsame(argv[i], "-F")) {
|
|
||||||
i++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(argv[i], "/SUBDIRECTORIES") ||
|
|
||||||
tool_strsame(argv[i], "-SUBDIRECTORIES") ||
|
|
||||||
tool_strsame(argv[i], "/S") || tool_strsame(argv[i], "-S")) {
|
|
||||||
recurse_subdirs = 1;
|
|
||||||
i++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
grant_usage_error();
|
|
||||||
grant_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
rights = grant_expand_supervisor_rights(rights);
|
|
||||||
|
|
||||||
if (tool_current_dhandle(&connid, &dhandle)) {
|
|
||||||
fprintf(stdout, "Specified path not locatable.\n");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
strmaxcpy(namebuf, objname, sizeof(namebuf) - 1);
|
|
||||||
upstr(namebuf);
|
|
||||||
object_id = ncp17_35_get_bindery_object_id(namebuf, objtype);
|
|
||||||
if (!object_id) {
|
|
||||||
char header[300];
|
|
||||||
|
|
||||||
trustee_header_path(header, path, sizeof(header));
|
|
||||||
fprintf(stdout, "\n%s\n", header);
|
|
||||||
if (objtype == GRANT_BINDERY_GROUP)
|
|
||||||
fprintf(stdout, "\aGroup \"%s\" not found.\n", objname);
|
|
||||||
else
|
|
||||||
fprintf(stdout, "\aUser \"%s\" not found.\n", objname);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (recurse_subdirs)
|
|
||||||
rc = grant_set_subdirs(path, (uint16)dhandle, object_id, rights);
|
|
||||||
else
|
|
||||||
rc = grant_set_one(path, (uint16)dhandle, object_id, rights);
|
|
||||||
|
|
||||||
if (rc) {
|
|
||||||
char header[300];
|
|
||||||
|
|
||||||
trustee_header_path(header, path, sizeof(header));
|
|
||||||
fprintf(stdout, "\n%s\n", header);
|
|
||||||
fprintf(stdout, "Invalid path or no match for pattern specified.\n\n");
|
|
||||||
return(grant_last_rc ? grant_last_rc : 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
char header[300];
|
|
||||||
char base[80];
|
|
||||||
char bracket[10];
|
|
||||||
|
|
||||||
trustee_header_path(header, path, sizeof(header));
|
|
||||||
tool_basename(base, path, sizeof(base));
|
|
||||||
grant_rights_bracket(rights, bracket);
|
|
||||||
|
|
||||||
fprintf(stdout, "\n%s\n", header);
|
|
||||||
fprintf(stdout, "%-33.33sRights set to [%s]\n\n", base, bracket);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
73
ipx.h
73
ipx.h
@@ -1,73 +0,0 @@
|
|||||||
/*
|
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
* Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: C declarations for IPX packet structures and low-level IPX/far-memory assembly glue.
|
|
||||||
* Depends on: ipx.asm for Open Watcom builds, doc/kern.asm for the historical TASM source, and net.h for shared types.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef IPX_H
|
|
||||||
#define IPX_H
|
|
||||||
|
|
||||||
#if defined(__WATCOMC__)
|
|
||||||
#define IPX_CALL _Cdecl
|
|
||||||
#else
|
|
||||||
#define IPX_CALL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8 checksum[2];
|
|
||||||
uint16 packetlen;
|
|
||||||
uint8 tcontrol;
|
|
||||||
uint8 ptype;
|
|
||||||
uint8 dest_net[4];
|
|
||||||
uint8 dest_node[6];
|
|
||||||
uint16 dest_sock; /* HI LOW */
|
|
||||||
uint8 source_net[4];
|
|
||||||
uint8 source_node[6];
|
|
||||||
uint16 source_sock; /* HI LOW */
|
|
||||||
} IPX_HEADER;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8 *link_address;
|
|
||||||
FUNC_VOID esr_routine;
|
|
||||||
uint8 in_use_flag;
|
|
||||||
uint8 completition_code;
|
|
||||||
uint16 socket; /* HI LOW */
|
|
||||||
uint8 ipx_workspace[4]; /* interner Gebrauch */
|
|
||||||
uint8 drv_workspace[4]; /* interner Gebrauch */
|
|
||||||
uint8 immediate_address[6]; /* HI LOW Node Address */
|
|
||||||
uint16 fragment_count; /* Anzahl Fragment Buffers */
|
|
||||||
uint8 *fragment_1;
|
|
||||||
uint16 fragment_1_size;
|
|
||||||
/* Können auch mehr sein */
|
|
||||||
} ECB;
|
|
||||||
|
|
||||||
extern int IPX_CALL IPXinit(void);
|
|
||||||
extern int IPX_CALL IPXopen_socket(UI sock, int live);
|
|
||||||
extern void IPX_CALL IPXclose_socket(UI sock);
|
|
||||||
extern int IPX_CALL IPXlisten(ECB *ecb);
|
|
||||||
extern void asm_esr_routine(void);
|
|
||||||
extern void esr_routine(ECB *ecb);
|
|
||||||
extern void IPX_CALL xmemmove(void *ziel, void *quelle, UI anz);
|
|
||||||
|
|
||||||
#undef IPX_CALL
|
|
||||||
|
|
||||||
#endif /* IPX_H */
|
|
||||||
@@ -1,25 +1,3 @@
|
|||||||
;
|
|
||||||
; mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
;
|
|
||||||
; Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
;
|
|
||||||
; This program is free software; you can redistribute it and/or
|
|
||||||
; modify it under the terms of the GNU General Public License
|
|
||||||
; as published by the Free Software Foundation; either version 2
|
|
||||||
; of the License, or (at your option) any later version.
|
|
||||||
;
|
|
||||||
; This program is distributed in the hope that it will be useful,
|
|
||||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
; GNU General Public License for more details.
|
|
||||||
;
|
|
||||||
; You should have received a copy of the GNU General Public License
|
|
||||||
; along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
; Purpose: Historical TASM/IDEAL low-level DOS, IPX and NetWare requester glue.
|
|
||||||
; Depends on: historical Borland/TASM build context; modern Open Watcom builds use ipx.asm and ncp.asm instead.
|
|
||||||
;
|
|
||||||
;
|
|
||||||
; kern.asm: 20-Nov-93, 21:52
|
; kern.asm: 20-Nov-93, 21:52
|
||||||
IDEAL
|
IDEAL
|
||||||
P286
|
P286
|
||||||
20
kern.h
Normal file
20
kern.h
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
/* kern.h Assembler Routinen 20-Nov-93 */
|
||||||
|
#if defined(__WATCOMC__)
|
||||||
|
#define KERN_CALL _Cdecl
|
||||||
|
#else
|
||||||
|
#define KERN_CALL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern int KERN_CALL IPXinit(void);
|
||||||
|
extern int KERN_CALL IPXopen_socket(UI sock, int live);
|
||||||
|
extern void KERN_CALL IPXclose_socket(UI sock);
|
||||||
|
extern int KERN_CALL IPXlisten(ECB *ecb);
|
||||||
|
extern void asm_esr_routine(void);
|
||||||
|
extern void esr_routine(ECB *ecb);
|
||||||
|
extern void KERN_CALL xmemmove(void *ziel, void *quelle, UI anz);
|
||||||
|
extern int KERN_CALL Net_Call(UI func, void *req, void *repl);
|
||||||
|
|
||||||
|
#undef KERN_CALL
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,35 +1,10 @@
|
|||||||
|
; kern_wasm.asm
|
||||||
;
|
;
|
||||||
; mars-nwe-dosutils - NetWare/DOS utility tools.
|
; Open Watcom WASM/MASM-syntax port of the old TASM IDEAL kern.asm.
|
||||||
;
|
|
||||||
; Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
;
|
|
||||||
; This program is free software; you can redistribute it and/or
|
|
||||||
; modify it under the terms of the GNU General Public License
|
|
||||||
; as published by the Free Software Foundation; either version 2
|
|
||||||
; of the License, or (at your option) any later version.
|
|
||||||
;
|
|
||||||
; This program is distributed in the hope that it will be useful,
|
|
||||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
; GNU General Public License for more details.
|
|
||||||
;
|
|
||||||
; You should have received a copy of the GNU General Public License
|
|
||||||
; along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
; Purpose: Open Watcom WASM/MASM-syntax IPX and far-memory helper glue.
|
|
||||||
; Depends on: ipx.h declarations, netcall.c callers and net.h shared types.
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ipx.asm
|
|
||||||
;
|
|
||||||
; Open Watcom WASM/MASM-syntax port of the IPX and xmemmove parts of
|
|
||||||
; the old TASM IDEAL kern.asm.
|
|
||||||
; Intended for 16-bit DOS large memory model builds on Linux with Open Watcom v2.
|
; Intended for 16-bit DOS large memory model builds on Linux with Open Watcom v2.
|
||||||
;
|
;
|
||||||
; Keep doc/kern.asm as the historical TASM source and use this split file for
|
; Keep kern.asm as the historical TASM source and use this file for the
|
||||||
; the reproducible Open Watcom build.
|
; reproducible Open Watcom build.
|
||||||
|
|
||||||
.286
|
.286
|
||||||
.model large
|
.model large
|
||||||
@@ -44,6 +19,8 @@ public _IPXopen_socket
|
|||||||
public _IPXclose_socket
|
public _IPXclose_socket
|
||||||
public _IPXlisten
|
public _IPXlisten
|
||||||
public _xmemmove
|
public _xmemmove
|
||||||
|
public _Net_Call
|
||||||
|
|
||||||
_IPXinit proc far
|
_IPXinit proc far
|
||||||
push bp
|
push bp
|
||||||
mov bp, sp
|
mov bp, sp
|
||||||
@@ -206,4 +183,34 @@ _IPXlisten proc far
|
|||||||
ret
|
ret
|
||||||
_IPXlisten endp
|
_IPXlisten endp
|
||||||
|
|
||||||
|
_Net_Call proc far
|
||||||
|
push bp
|
||||||
|
mov bp, sp
|
||||||
|
|
||||||
|
; int Net_Call(UI func, void *req, void *repl)
|
||||||
|
; [bp+6] func
|
||||||
|
; [bp+8] req offset
|
||||||
|
; [bp+10] req segment
|
||||||
|
; [bp+12] repl offset
|
||||||
|
; [bp+14] repl segment
|
||||||
|
mov ax, [bp+6]
|
||||||
|
|
||||||
|
push ds
|
||||||
|
push si
|
||||||
|
push di
|
||||||
|
pushf
|
||||||
|
|
||||||
|
lds si, dword ptr [bp+8]
|
||||||
|
les di, dword ptr [bp+12]
|
||||||
|
int 21h
|
||||||
|
|
||||||
|
popf
|
||||||
|
pop di
|
||||||
|
pop si
|
||||||
|
pop ds
|
||||||
|
pop bp
|
||||||
|
mov ah, 0
|
||||||
|
ret
|
||||||
|
_Net_Call endp
|
||||||
|
|
||||||
end
|
end
|
||||||
460
map.c
460
map.c
@@ -1,27 +1,8 @@
|
|||||||
/*
|
/* map.c 05-Apr-96 */
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
* Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/****************************************************************
|
||||||
* Purpose: MAP and PATH command implementation for NetWare drive/search-drive mappings.
|
* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany *
|
||||||
* Depends on: net.h, netcall.c requester helpers, tools.c shared utility routines, ncp.asm/doc/kern.asm low-level Net_Call glue.
|
****************************************************************/
|
||||||
*/
|
|
||||||
|
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
|
||||||
@@ -47,9 +28,9 @@ static void show_map(uint8 *drvstr)
|
|||||||
if (flags & 0x80) { /* lokal DRIVE */
|
if (flags & 0x80) { /* lokal DRIVE */
|
||||||
path[0]= '\\';
|
path[0]= '\\';
|
||||||
if (j < 2){
|
if (j < 2){
|
||||||
strcpy(path, "maps to a local disk.");
|
strcpy(path, "DISK LW");
|
||||||
} else if (getcurdir(j+1, path+1)) {
|
} else if (getcurdir(j+1, path+1)) {
|
||||||
strcpy(path, "maps to a local disk.");
|
strcpy(path, "LW !OK");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (get_dir_path(dhandle, path)) {
|
if (get_dir_path(dhandle, path)) {
|
||||||
@@ -60,7 +41,7 @@ static void show_map(uint8 *drvstr)
|
|||||||
strcat(servern, "\\");
|
strcat(servern, "\\");
|
||||||
} else servern[0]='\0';
|
} else servern[0]='\0';
|
||||||
}
|
}
|
||||||
if (flags & 0x80) printf("Drive %c: %s\n", (char)j+'A', path); else printf("Drive %c: = %s%s\n", (char)j+'A', servern, path);
|
printf("MAP %c: = %s%s\n", (char)j+'A', servern, path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -77,9 +58,9 @@ static void do_map(int drive, NWPATH *nwp)
|
|||||||
if (flags & 0x80) { /* lokal DRIVE */
|
if (flags & 0x80) { /* lokal DRIVE */
|
||||||
path[0]= '\\';
|
path[0]= '\\';
|
||||||
if (drive < 2){
|
if (drive < 2){
|
||||||
strcpy(path, "maps to a local disk.");
|
strcpy(path, "DISK LW");
|
||||||
} else if (getcurdir(drive+1, path+1)) {
|
} else if (getcurdir(drive+1, path+1)) {
|
||||||
strcpy(path, "maps to a local disk.");
|
strcpy(path, "LW !OK");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (get_dir_path(dhandle, path)) {
|
if (get_dir_path(dhandle, path)) {
|
||||||
@@ -99,41 +80,19 @@ static void do_map(int drive, NWPATH *nwp)
|
|||||||
static int do_map(int drive, NWPATH *nwp, int delete)
|
static int do_map(int drive, NWPATH *nwp, int delete)
|
||||||
{
|
{
|
||||||
int result = -1;
|
int result = -1;
|
||||||
|
|
||||||
if (drive > -1 && drive < 32) {
|
if (drive > -1 && drive < 32) {
|
||||||
uint8 connid = 0;
|
uint8 connid;
|
||||||
uint8 dhandle = 0;
|
uint8 dhandle;
|
||||||
uint8 flags = 0;
|
uint8 flags;
|
||||||
|
if (!delete ||
|
||||||
if (delete) {
|
(!get_drive_info(drive, &connid, &dhandle, &flags) && flags && connid)){
|
||||||
if (!get_drive_info(drive, &connid, &dhandle, &flags)
|
uint8 nmdrive[3];
|
||||||
&& flags && !(flags & 0x80) && connid) {
|
nmdrive[0] = drive+'A';
|
||||||
result = dealloc_dir_handle(dhandle);
|
nmdrive[1] = ':';
|
||||||
}
|
nmdrive[2] = '\0';
|
||||||
} else {
|
result = redir_device_drive(delete ? -1 : 0x4, nmdrive, nwp->path);
|
||||||
/*
|
|
||||||
* The old mars-dosutils MAP used DOS redirector INT 21h AX=5F03h.
|
|
||||||
* NetWare Client32 returns AX=0001 for that call, while Novell MAP
|
|
||||||
* works. Use the NetWare shell/NCP "Allocate Permanent Directory
|
|
||||||
* Handle" path instead; this is what the surrounding code already
|
|
||||||
* provides via alloc_permanent_dir_handle().
|
|
||||||
*/
|
|
||||||
if (!get_drive_info(drive, &connid, &dhandle, &flags)
|
|
||||||
&& flags && !(flags & 0x80) && connid) {
|
|
||||||
(void)dealloc_dir_handle(dhandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
result = alloc_permanent_dir_handle(0, nwp->path, drive + 'A', NULL);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Some requesters historically accepted lowercase drive letters in
|
|
||||||
* this call. Keep this only as compatibility fallback.
|
|
||||||
*/
|
|
||||||
if (result < 0)
|
|
||||||
result = alloc_permanent_dir_handle(0, nwp->path, drive + 'a', NULL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,211 +166,18 @@ static int parse_argv(uint8 *drvstr, NWPATH *nwpath,
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int parse_pathins_arg(uint8 *drvstr, NWPATH *nwp,
|
|
||||||
int argc, char *argv[], int mode);
|
|
||||||
static int set_search_native(uint8 *drvstr, NWPATH *nwp, int pathmode);
|
|
||||||
static int show_search(uint8 *drvstr);
|
|
||||||
|
|
||||||
static int map_is_drive_arg(char *s)
|
|
||||||
{
|
|
||||||
if (!s || !s[0] || s[1] != ':' || s[2]) return(0);
|
|
||||||
if (s[0] >= 'A' && s[0] <= 'Z') return(1);
|
|
||||||
if (s[0] >= 'a' && s[0] <= 'z') return(1);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int map_drive_index(char *s)
|
|
||||||
{
|
|
||||||
if (s[0] >= 'a' && s[0] <= 'z') return(s[0] - 'a');
|
|
||||||
return(s[0] - 'A');
|
|
||||||
}
|
|
||||||
|
|
||||||
static void map_drive_name(char *dst, char *src)
|
|
||||||
{
|
|
||||||
dst[0] = src[0];
|
|
||||||
if (dst[0] >= 'a' && dst[0] <= 'z') dst[0] -= 32;
|
|
||||||
dst[1] = ':';
|
|
||||||
dst[2] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
static int map_find_free_drive(int ordinal)
|
|
||||||
{
|
|
||||||
int drive;
|
|
||||||
|
|
||||||
if (ordinal < 1) ordinal = 1;
|
|
||||||
|
|
||||||
for (drive = 2; drive < 26; drive++) {
|
|
||||||
uint8 connid = 0;
|
|
||||||
uint8 dhandle = 0;
|
|
||||||
uint8 flags = 0;
|
|
||||||
|
|
||||||
if (!get_drive_info((uint8)drive, &connid, &dhandle, &flags)) {
|
|
||||||
if (flags) continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (--ordinal == 0) return(drive);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int parse_auto_map_arg(uint8 *drvstr, NWPATH *nwp, int argc, char *argv[])
|
|
||||||
{
|
|
||||||
char joined[512];
|
|
||||||
char *p;
|
|
||||||
char *q;
|
|
||||||
int ordinal = 0;
|
|
||||||
int drive;
|
|
||||||
int k;
|
|
||||||
|
|
||||||
*drvstr = '\0';
|
|
||||||
memset(nwp, 0, sizeof(NWPATH));
|
|
||||||
nwp->path = nwp->buff;
|
|
||||||
*(nwp->buff) = '\0';
|
|
||||||
|
|
||||||
if (argc < 2) return(1);
|
|
||||||
|
|
||||||
joined[0] = '\0';
|
|
||||||
for (k = 1; k < argc; k++) {
|
|
||||||
if (k > 1) strcat(joined, " ");
|
|
||||||
strncat(joined, argv[k], sizeof(joined) - strlen(joined) - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
p = joined;
|
|
||||||
while (*p == ' ' || *p == '\t') p++;
|
|
||||||
if (*p != '*') return(1);
|
|
||||||
p++;
|
|
||||||
|
|
||||||
while (*p >= '0' && *p <= '9') {
|
|
||||||
ordinal = ordinal * 10 + (*p - '0');
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ordinal < 1) ordinal = 1;
|
|
||||||
if (*p != ':') return(-1);
|
|
||||||
p++;
|
|
||||||
|
|
||||||
while (*p == ' ' || *p == '\t') p++;
|
|
||||||
if (*p != '=') return(-1);
|
|
||||||
p++;
|
|
||||||
while (*p == ' ' || *p == '\t') p++;
|
|
||||||
if (!*p) return(-1);
|
|
||||||
|
|
||||||
drive = map_find_free_drive(ordinal);
|
|
||||||
if (drive < 0) return(-1);
|
|
||||||
|
|
||||||
drvstr[0] = (uint8)(drive + 'A');
|
|
||||||
drvstr[1] = '\0';
|
|
||||||
|
|
||||||
q = nwp->buff;
|
|
||||||
while (*p && (q - nwp->buff) < (int)sizeof(nwp->buff) - 1) {
|
|
||||||
if (*p >= 'a' && *p <= 'z') *q++ = *p++ - 0x20;
|
|
||||||
else *q++ = *p++;
|
|
||||||
}
|
|
||||||
*q = '\0';
|
|
||||||
nwp->path = nwp->buff;
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int map_handle_path_command(int argc, char *argv[], int pathmode)
|
|
||||||
{
|
|
||||||
uint8 drvstr[22];
|
|
||||||
NWPATH nwpath;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
rc = parse_pathins_arg(drvstr, &nwpath, argc, argv, pathmode);
|
|
||||||
if (!rc) {
|
|
||||||
int result = 0;
|
|
||||||
|
|
||||||
if (*(nwpath.path) || pathmode == 1)
|
|
||||||
result = set_search_native(drvstr, &nwpath, pathmode);
|
|
||||||
|
|
||||||
if (result < 0)
|
|
||||||
fprintf(stderr, "Cannot interpret line. errcode=-1\n");
|
|
||||||
else if (pathmode != 1)
|
|
||||||
show_search(drvstr);
|
|
||||||
else
|
|
||||||
fprintf(stdout, "The search mapping for drive S%d: was deleted\n",
|
|
||||||
(int)drvstr[1]);
|
|
||||||
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(stderr, "Cannot interpret line. errcode=-1\n");
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int func_map(int argc, char *argv[], int mode)
|
int func_map(int argc, char *argv[], int mode)
|
||||||
{
|
{
|
||||||
uint8 drvstr[22];
|
uint8 drvstr[22];
|
||||||
NWPATH nwpath;
|
NWPATH nwpath;
|
||||||
|
|
||||||
if (!ipx_init()) argc = 1;
|
if (!ipx_init()) argc = 1;
|
||||||
|
|
||||||
/*
|
|
||||||
* Novell MAP accepts subcommands through MAP itself:
|
|
||||||
* MAP DEL H:
|
|
||||||
* MAP INS S1:=SYS:PUBLIC
|
|
||||||
* MAP DEL S1:
|
|
||||||
* The original mars-dosutils exposed those mainly as MAPDEL/PATHINS/PATHDEL,
|
|
||||||
* so handle the Novell syntax here and then reuse the existing primitives.
|
|
||||||
*/
|
|
||||||
if (argc > 1) {
|
|
||||||
if (tool_strsame(argv[1], "/?") || tool_strsame(argv[1], "-?") ||
|
|
||||||
tool_strsame(argv[1], "?")) {
|
|
||||||
fprintf(stderr, "Directory \"/?\" is not locatable.\n");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(argv[1], "INS") || tool_strsame(argv[1], "INSERT")) {
|
|
||||||
if (argc < 3) {
|
|
||||||
fprintf(stderr, "Cannot interpret line. errcode=-1\n");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
return(map_handle_path_command(argc - 1, argv + 1, 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(argv[1], "DEL") || tool_strsame(argv[1], "DELETE")) {
|
|
||||||
if (argc < 3) {
|
|
||||||
fprintf(stderr, "Cannot interpret line. errcode=-1\n");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (map_is_drive_arg(argv[2])) {
|
|
||||||
char dname[3];
|
|
||||||
int drive = map_drive_index(argv[2]);
|
|
||||||
|
|
||||||
if (do_map(drive, &nwpath, 1) < 0) {
|
|
||||||
fprintf(stderr, "Cannot interpret line. errcode=-1\n");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
map_drive_name(dname, argv[2]);
|
|
||||||
fprintf(stdout, "The mapping for drive %s has been deleted.\n", dname);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(map_handle_path_command(argc - 1, argv + 1, 1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!parse_auto_map_arg(drvstr, &nwpath, argc, argv)) {
|
|
||||||
if (*(nwpath.path)) {
|
|
||||||
if (do_map(*drvstr - 'A', &nwpath, mode)< 0)
|
|
||||||
fprintf(stderr, "MAP Error\n");
|
|
||||||
}
|
|
||||||
if (mode != 1)
|
|
||||||
show_map(drvstr);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!parse_argv(drvstr, &nwpath, argc, argv, 0, mode)) {
|
if (!parse_argv(drvstr, &nwpath, argc, argv, 0, mode)) {
|
||||||
if (*(nwpath.path) || mode==1) {
|
if (*(nwpath.path) || mode==1) {
|
||||||
if (do_map(*drvstr - 'A', &nwpath, mode)< 0)
|
{
|
||||||
fprintf(stderr, "MAP Error\n");
|
int rc = do_map(*drvstr - 'A', &nwpath, mode);
|
||||||
|
if (rc < 0)
|
||||||
|
fprintf(stderr, "MAP Error rc=%d\n", rc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (mode != 1)
|
if (mode != 1)
|
||||||
show_map(drvstr);
|
show_map(drvstr);
|
||||||
@@ -512,192 +278,18 @@ static int set_search(uint8 *drvstr, NWPATH *nwp, int pathmode)
|
|||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int path_is_drive_path(uint8 *path)
|
|
||||||
{
|
|
||||||
if (!path || !path[0] || path[1] != ':') return(0);
|
|
||||||
if (path[0] >= 'A' && path[0] <= 'Z') return(1);
|
|
||||||
if (path[0] >= 'a' && path[0] <= 'z') return(1);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void upstr_local(uint8 *s)
|
|
||||||
{
|
|
||||||
while (*s) {
|
|
||||||
if (*s >= 'a' && *s <= 'z') *s -= 0x20;
|
|
||||||
s++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int parse_pathins_arg(uint8 *drvstr, NWPATH *nwp, int argc, char *argv[], int mode)
|
|
||||||
{
|
|
||||||
char joined[512];
|
|
||||||
char *p;
|
|
||||||
char *q;
|
|
||||||
int slot = 0;
|
|
||||||
int k;
|
|
||||||
|
|
||||||
*drvstr = '\0';
|
|
||||||
memset(nwp, 0, sizeof(NWPATH));
|
|
||||||
nwp->path = nwp->buff;
|
|
||||||
*(nwp->buff) = '\0';
|
|
||||||
|
|
||||||
if (argc < 2) return(1);
|
|
||||||
|
|
||||||
joined[0] = '\0';
|
|
||||||
for (k = 1; k < argc; k++) {
|
|
||||||
if (k > 1) strcat(joined, " ");
|
|
||||||
strncat(joined, argv[k], sizeof(joined) - strlen(joined) - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
p = joined;
|
|
||||||
while (*p == ' ' || *p == '\t') p++;
|
|
||||||
|
|
||||||
if (*p != 'S' && *p != 's') return(-1);
|
|
||||||
p++;
|
|
||||||
|
|
||||||
while (*p >= '0' && *p <= '9') {
|
|
||||||
slot = slot * 10 + (*p - '0');
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (slot < 1 || slot > 16) return(-1);
|
|
||||||
if (*p != ':') return(-1);
|
|
||||||
p++;
|
|
||||||
|
|
||||||
drvstr[0] = 's';
|
|
||||||
drvstr[1] = (uint8)slot;
|
|
||||||
drvstr[2] = '\0';
|
|
||||||
|
|
||||||
while (*p == ' ' || *p == '\t') p++;
|
|
||||||
|
|
||||||
if (mode == 1) {
|
|
||||||
/* PATHDEL S1: */
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*p == '=') p++;
|
|
||||||
while (*p == ' ' || *p == '\t') p++;
|
|
||||||
|
|
||||||
if (!*p) return(-1);
|
|
||||||
|
|
||||||
q = nwp->buff;
|
|
||||||
while (*p && (q - nwp->buff) < (int)sizeof(nwp->buff) - 1) {
|
|
||||||
*q++ = *p++;
|
|
||||||
}
|
|
||||||
*q = '\0';
|
|
||||||
|
|
||||||
upstr_local(nwp->buff);
|
|
||||||
nwp->path = nwp->buff;
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int set_search_native(uint8 *drvstr, NWPATH *nwp, int pathmode)
|
|
||||||
{
|
|
||||||
int result=-1;
|
|
||||||
SEARCH_VECTOR drives;
|
|
||||||
SEARCH_VECTOR_ENTRY *p=drives;
|
|
||||||
int j=0;
|
|
||||||
int entry = (*drvstr=='s') ? *(drvstr+1) : 0;
|
|
||||||
|
|
||||||
get_search_drive_vektor(drives);
|
|
||||||
|
|
||||||
while (p->drivenummer != 0xff && j++ < 16) {
|
|
||||||
if (!entry && path_is_drive_path(nwp->path)
|
|
||||||
&& (p->drivenummer + 'A' == nwp->path[0])) entry=j;
|
|
||||||
|
|
||||||
if (path_is_drive_path(nwp->path)
|
|
||||||
&& p->drivenummer + 'A' == nwp->path[0]
|
|
||||||
&& !strcmp(nwp->path+2, p->dospath)) {
|
|
||||||
p->drivenummer=0xfe;
|
|
||||||
*(p->dospath) = '\0';
|
|
||||||
p->flags = 0;
|
|
||||||
}
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entry > 0) {
|
|
||||||
if (entry > 16) entry = 16;
|
|
||||||
|
|
||||||
if (pathmode == 2 && entry <= j && entry < 16) { /* insert modus */
|
|
||||||
int k=j+1-entry;
|
|
||||||
if (j < 16) {
|
|
||||||
p++;
|
|
||||||
k++;
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
while (k--) {
|
|
||||||
memcpy(p, p-1, sizeof(SEARCH_VECTOR_ENTRY));
|
|
||||||
--p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (--entry < j)
|
|
||||||
p = drives+entry;
|
|
||||||
else
|
|
||||||
(p+1)->drivenummer = 0xff;
|
|
||||||
|
|
||||||
memset(p, 0, sizeof(SEARCH_VECTOR_ENTRY));
|
|
||||||
|
|
||||||
if (pathmode==1) {
|
|
||||||
p->drivenummer = 0xfe;
|
|
||||||
*(p->dospath) = '\0';
|
|
||||||
result = set_search_drive_vektor(drives);
|
|
||||||
} else if (path_is_drive_path(nwp->path)) {
|
|
||||||
p->flags = 0;
|
|
||||||
p->drivenummer = (uint8)(nwp->path[0] - 'A');
|
|
||||||
if (nwp->path[0] >= 'a' && nwp->path[0] <= 'z')
|
|
||||||
p->drivenummer = (uint8)(nwp->path[0] - 'a');
|
|
||||||
strmaxcpy(p->dospath, nwp->path+2, sizeof(p->dospath)-1);
|
|
||||||
result = set_search_drive_vektor(drives);
|
|
||||||
} else {
|
|
||||||
/*
|
|
||||||
* Search path entries are not drive mappings. The original code stores
|
|
||||||
* the NetWare path text directly in dospath with drivenummer=0xfe.
|
|
||||||
* Client32 keeps/prints these entries correctly; allocating a permanent
|
|
||||||
* directory handle here made set_search_drive_vektor() return success,
|
|
||||||
* but the entry did not actually replace SEARCH1.
|
|
||||||
*/
|
|
||||||
p->flags = 0;
|
|
||||||
p->drivenummer = 0xfe;
|
|
||||||
strmaxcpy(p->dospath, nwp->path, sizeof(p->dospath)-1);
|
|
||||||
result = set_search_drive_vektor(drives);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int func_path(int argc, char *argv[], int mode)
|
int func_path(int argc, char *argv[], int mode)
|
||||||
{
|
{
|
||||||
uint8 drvstr[22];
|
uint8 drvstr[22];
|
||||||
NWPATH nwpath;
|
NWPATH nwpath;
|
||||||
int rc;
|
if (!parse_argv(drvstr, &nwpath, argc, argv, 1, mode)) {
|
||||||
|
|
||||||
/*
|
|
||||||
* PATH/PATHINS/PATHDEL need their own parser. The old parse_argv()
|
|
||||||
* rejects common login-script syntax such as:
|
|
||||||
* PATHINS S1:=SYS:PUBLIC
|
|
||||||
* MAP INS S1:=SYS:PUBLIC
|
|
||||||
*/
|
|
||||||
if (argc < 2) {
|
|
||||||
show_search("");
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = parse_pathins_arg(drvstr, &nwpath, argc, argv, mode);
|
|
||||||
if (!rc) {
|
|
||||||
int result=0;
|
int result=0;
|
||||||
if (*(nwpath.path) || mode==1)
|
if (*(nwpath.path) || mode==1)
|
||||||
result=set_search_native(drvstr, &nwpath, mode);
|
result=set_search(drvstr, &nwpath, mode);
|
||||||
if (mode != 1)
|
if (mode != 1)
|
||||||
show_search(drvstr);
|
show_search(drvstr);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "Cannot interpret line. errcode=-1\n");
|
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
817
ncp.asm
817
ncp.asm
@@ -1,817 +0,0 @@
|
|||||||
;
|
|
||||||
; mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
;
|
|
||||||
; Copyright (C) 2026 Mario Fetka
|
|
||||||
; Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
;
|
|
||||||
; This program is free software; you can redistribute it and/or
|
|
||||||
; modify it under the terms of the GNU General Public License
|
|
||||||
; as published by the Free Software Foundation; either version 2
|
|
||||||
; of the License, or (at your option) any later version.
|
|
||||||
;
|
|
||||||
; This program is distributed in the hope that it will be useful,
|
|
||||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
; GNU General Public License for more details.
|
|
||||||
;
|
|
||||||
; You should have received a copy of the GNU General Public License
|
|
||||||
; along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
; Purpose: Open Watcom WASM/MASM-syntax NetWare requester and Client32 transport glue.
|
|
||||||
; Depends on: ncp.h declarations, ncpcall.c transport helpers and ncpapi.c API wrappers.
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ncp.asm
|
|
||||||
;
|
|
||||||
; Low-level INT 21h Net_Call and Client32 requester entry points used by the
|
|
||||||
; DOS NCP transport helpers. This file is split from the former combined
|
|
||||||
; Open Watcom assembly glue so IPX support can stay in ipx.asm.
|
|
||||||
|
|
||||||
.286
|
|
||||||
.model large
|
|
||||||
|
|
||||||
.code
|
|
||||||
|
|
||||||
public _Net_Call
|
|
||||||
public _ncp_raw_request
|
|
||||||
public _ncp_openref_request
|
|
||||||
public _ncp_mapvar_request
|
|
||||||
|
|
||||||
_Net_Call proc far
|
|
||||||
push bp
|
|
||||||
mov bp, sp
|
|
||||||
|
|
||||||
; int Net_Call(UI func, void *req, void *repl)
|
|
||||||
; [bp+6] func
|
|
||||||
; [bp+8] req offset
|
|
||||||
; [bp+10] req segment
|
|
||||||
; [bp+12] repl offset
|
|
||||||
; [bp+14] repl segment
|
|
||||||
mov ax, [bp+6]
|
|
||||||
|
|
||||||
push ds
|
|
||||||
push si
|
|
||||||
push di
|
|
||||||
pushf
|
|
||||||
|
|
||||||
lds si, dword ptr [bp+8]
|
|
||||||
les di, dword ptr [bp+12]
|
|
||||||
int 21h
|
|
||||||
|
|
||||||
popf
|
|
||||||
pop di
|
|
||||||
pop si
|
|
||||||
pop ds
|
|
||||||
pop bp
|
|
||||||
mov ah, 0
|
|
||||||
ret
|
|
||||||
_Net_Call endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; int ncp_openref_request(UI refLo, UI refHi, void *outbuf)
|
|
||||||
;
|
|
||||||
; Opens a Client32 connection by connection reference using the same d32wrap
|
|
||||||
; convention as _CONNOpenByReference / w95ocref.o.
|
|
||||||
;
|
|
||||||
; Input:
|
|
||||||
; refLo/refHi = connection reference, e.g. C32PRIMREF returned 0028:0000.
|
|
||||||
;
|
|
||||||
; outbuf:
|
|
||||||
; +00 load AX from D8C1
|
|
||||||
; +02 resolver off
|
|
||||||
; +04 resolver seg
|
|
||||||
; +06 trampoline off
|
|
||||||
; +08 trampoline seg
|
|
||||||
; +0A function off
|
|
||||||
; +0C function seg
|
|
||||||
; +0E return AX
|
|
||||||
; +10 return DX
|
|
||||||
; +12 handle low
|
|
||||||
; +14 handle high
|
|
||||||
_ncp_openref_request proc far
|
|
||||||
push bp
|
|
||||||
mov bp, sp
|
|
||||||
sub sp, 80
|
|
||||||
|
|
||||||
push ds
|
|
||||||
push es
|
|
||||||
push si
|
|
||||||
push di
|
|
||||||
|
|
||||||
; clear ESI/ECX
|
|
||||||
db 66h, 33h, 0F6h
|
|
||||||
db 66h, 33h, 0C9h
|
|
||||||
|
|
||||||
mov ax, 0D8C1h
|
|
||||||
int 2Fh
|
|
||||||
|
|
||||||
mov [bp-4], ax ; load AX
|
|
||||||
; resolver ESI -> [bp-8]
|
|
||||||
db 66h, 89h, 76h, 0F8h
|
|
||||||
; trampoline ECX -> [bp-12]
|
|
||||||
db 66h, 89h, 4Eh, 0F4h
|
|
||||||
|
|
||||||
or ax, ax
|
|
||||||
jne c32openref_fail
|
|
||||||
|
|
||||||
; resolve "CONNOpenByReference"
|
|
||||||
push cs
|
|
||||||
push offset c32openref_name
|
|
||||||
push 0
|
|
||||||
push 0
|
|
||||||
call dword ptr [bp-8]
|
|
||||||
add sp, 8
|
|
||||||
mov [bp-16], ax
|
|
||||||
mov [bp-14], dx
|
|
||||||
or ax, dx
|
|
||||||
jne c32openref_have_func
|
|
||||||
jmp c32openref_fail
|
|
||||||
|
|
||||||
c32openref_have_func:
|
|
||||||
; local output handle dword at [bp-20]
|
|
||||||
mov word ptr [bp-20], 0
|
|
||||||
mov word ptr [bp-18], 0
|
|
||||||
|
|
||||||
; MapLockFlat(&handle, 4) -> flat [bp-24]
|
|
||||||
push 0
|
|
||||||
push 4
|
|
||||||
push ss
|
|
||||||
lea ax, -20[bp]
|
|
||||||
push ax
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
call dword ptr [bp-8]
|
|
||||||
add sp, 0cH
|
|
||||||
mov [bp-24], ax
|
|
||||||
mov [bp-22], dx
|
|
||||||
|
|
||||||
; Call NIOS trampoline command 5 / CONNOpenByReference.
|
|
||||||
; This matches d32wrap _CONNOpenByReference after w95ocref:
|
|
||||||
; flat handle ptr,
|
|
||||||
; refHi/refLo,
|
|
||||||
; 0,0,
|
|
||||||
; FEFE FEFE FEFE FEFE,
|
|
||||||
; command 5,
|
|
||||||
; function ptr.
|
|
||||||
push word ptr [bp-22] ; flat handle high
|
|
||||||
push word ptr [bp-24] ; flat handle low
|
|
||||||
push word ptr [bp+8] ; ref high
|
|
||||||
push word ptr [bp+6] ; ref low
|
|
||||||
push 0
|
|
||||||
push 0
|
|
||||||
push 0fefeH
|
|
||||||
push 0fefeH
|
|
||||||
push 0fefeH
|
|
||||||
push 0fefeH
|
|
||||||
push 0
|
|
||||||
push 5
|
|
||||||
push word ptr [bp-14] ; function seg
|
|
||||||
push word ptr [bp-16] ; function off
|
|
||||||
call dword ptr [bp-12]
|
|
||||||
add sp, 1cH
|
|
||||||
|
|
||||||
mov [bp-28], ax
|
|
||||||
mov [bp-26], dx
|
|
||||||
|
|
||||||
; UnlockFlat(handle flat, 4)
|
|
||||||
push 0
|
|
||||||
push 4
|
|
||||||
push word ptr [bp-22]
|
|
||||||
push word ptr [bp-24]
|
|
||||||
push 0
|
|
||||||
push 3
|
|
||||||
call dword ptr [bp-8]
|
|
||||||
add sp, 0cH
|
|
||||||
|
|
||||||
jmp short c32openref_store
|
|
||||||
|
|
||||||
c32openref_fail:
|
|
||||||
mov word ptr [bp-16], 0
|
|
||||||
mov word ptr [bp-14], 0
|
|
||||||
mov word ptr [bp-28], 0ffffH
|
|
||||||
mov word ptr [bp-26], 0ffffH
|
|
||||||
mov word ptr [bp-20], 0
|
|
||||||
mov word ptr [bp-18], 0
|
|
||||||
|
|
||||||
c32openref_store:
|
|
||||||
les di, dword ptr [bp+10]
|
|
||||||
|
|
||||||
mov ax, [bp-4]
|
|
||||||
mov es:[di+0], ax
|
|
||||||
mov ax, [bp-8]
|
|
||||||
mov es:[di+2], ax
|
|
||||||
mov ax, [bp-6]
|
|
||||||
mov es:[di+4], ax
|
|
||||||
mov ax, [bp-12]
|
|
||||||
mov es:[di+6], ax
|
|
||||||
mov ax, [bp-10]
|
|
||||||
mov es:[di+8], ax
|
|
||||||
mov ax, [bp-16]
|
|
||||||
mov es:[di+10], ax
|
|
||||||
mov ax, [bp-14]
|
|
||||||
mov es:[di+12], ax
|
|
||||||
mov ax, [bp-28]
|
|
||||||
mov es:[di+14], ax
|
|
||||||
mov ax, [bp-26]
|
|
||||||
mov es:[di+16], ax
|
|
||||||
mov ax, [bp-20]
|
|
||||||
mov es:[di+18], ax
|
|
||||||
mov ax, [bp-18]
|
|
||||||
mov es:[di+20], ax
|
|
||||||
|
|
||||||
pop di
|
|
||||||
pop si
|
|
||||||
pop es
|
|
||||||
pop ds
|
|
||||||
mov sp, bp
|
|
||||||
pop bp
|
|
||||||
xor ah, ah
|
|
||||||
ret
|
|
||||||
|
|
||||||
c32openref_name db 'CONNOpenByReference',0
|
|
||||||
|
|
||||||
_ncp_openref_request endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; int ncp_mapvar_request(UI specLen, UI flag, void *outbuf)
|
|
||||||
;
|
|
||||||
; Exact-ish raw version of w95mconn.o::__C32MapConn16To32 second step.
|
|
||||||
;
|
|
||||||
; It emulates:
|
|
||||||
; C32MAPCONNONE 40 -> server name MARS
|
|
||||||
; NWCSCANCONNINFO(scanIterator/result ptr,
|
|
||||||
; scanInfoLevel=0A, scanConnInfo=NWCString/SPECTDATA "MARS",
|
|
||||||
; scanFlags=1, connInfoVersion=0,
|
|
||||||
; returnInfoLevel=0, returnConnInfo=NULL,
|
|
||||||
; connReference local)
|
|
||||||
;
|
|
||||||
; But calls Client32 CONNScanInfo directly through ECX/NIOS command 0A.
|
|
||||||
;
|
|
||||||
; outbuf:
|
|
||||||
; +00 load AX
|
|
||||||
; +02 resolver off
|
|
||||||
; +04 resolver seg
|
|
||||||
; +06 trampoline off
|
|
||||||
; +08 trampoline seg
|
|
||||||
; +0A function off
|
|
||||||
; +0C function seg
|
|
||||||
; +0E ret AX
|
|
||||||
; +10 ret DX
|
|
||||||
; +12 resultRef low ; corresponds to caller output ptr in w95mconn
|
|
||||||
; +14 resultRef high
|
|
||||||
; +16 connRefLocal low ; corresponds to d32conni local -1c
|
|
||||||
; +18 connRefLocal high
|
|
||||||
_ncp_mapvar_request proc far
|
|
||||||
push bp
|
|
||||||
mov bp, sp
|
|
||||||
sub sp, 140
|
|
||||||
|
|
||||||
push ds
|
|
||||||
push es
|
|
||||||
push si
|
|
||||||
push di
|
|
||||||
|
|
||||||
; clear ESI/ECX
|
|
||||||
db 66h, 33h, 0F6h
|
|
||||||
db 66h, 33h, 0C9h
|
|
||||||
|
|
||||||
mov ax, 0D8C1h
|
|
||||||
int 2Fh
|
|
||||||
|
|
||||||
mov [bp-4], ax ; load AX
|
|
||||||
; resolver ESI -> [bp-8]
|
|
||||||
db 66h, 89h, 76h, 0F8h
|
|
||||||
; trampoline ECX -> [bp-12]
|
|
||||||
db 66h, 89h, 4Eh, 0F4h
|
|
||||||
|
|
||||||
or ax, ax
|
|
||||||
jne c32mapvar_fail
|
|
||||||
|
|
||||||
; resolve "CONNScanInfo"
|
|
||||||
push cs
|
|
||||||
push offset c32mapvar_name
|
|
||||||
push 0
|
|
||||||
push 0
|
|
||||||
call dword ptr [bp-8]
|
|
||||||
add sp, 8
|
|
||||||
mov [bp-16], ax
|
|
||||||
mov [bp-14], dx
|
|
||||||
or ax, dx
|
|
||||||
jne c32mapvar_have_func
|
|
||||||
jmp c32mapvar_fail
|
|
||||||
|
|
||||||
c32mapvar_have_func:
|
|
||||||
; resultRef/output dword at [bp-20], init 0
|
|
||||||
mov word ptr [bp-20], 0
|
|
||||||
mov word ptr [bp-18], 0
|
|
||||||
|
|
||||||
; connReference local dword at [bp-24], init 0
|
|
||||||
mov word ptr [bp-24], 0
|
|
||||||
mov word ptr [bp-22], 0
|
|
||||||
|
|
||||||
; string buffer at [bp-80], copy "MARS", zero padded enough
|
|
||||||
lea di, -80[bp]
|
|
||||||
push ss
|
|
||||||
pop es
|
|
||||||
mov byte ptr es:[di+0], 'M'
|
|
||||||
mov byte ptr es:[di+1], 'A'
|
|
||||||
mov byte ptr es:[di+2], 'R'
|
|
||||||
mov byte ptr es:[di+3], 'S'
|
|
||||||
mov byte ptr es:[di+4], 0
|
|
||||||
|
|
||||||
; Map string buffer len 31h -> [bp-28]
|
|
||||||
push 0
|
|
||||||
push 31H
|
|
||||||
push ss
|
|
||||||
lea ax, -80[bp]
|
|
||||||
push ax
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
call dword ptr [bp-8]
|
|
||||||
add sp, 0cH
|
|
||||||
mov [bp-28], ax
|
|
||||||
mov [bp-26], dx
|
|
||||||
|
|
||||||
; Build SPECTDATA/NWCString transfer block at [bp-48], len 10h.
|
|
||||||
; Mirrors d32conni initialization for server-name scan.
|
|
||||||
mov ax, [bp+6]
|
|
||||||
mov word ptr [bp-48], ax
|
|
||||||
mov word ptr [bp-46], 0
|
|
||||||
mov ax, [bp-28]
|
|
||||||
mov word ptr [bp-44], ax
|
|
||||||
mov ax, [bp-26]
|
|
||||||
mov word ptr [bp-42], ax
|
|
||||||
mov word ptr [bp-40], 1
|
|
||||||
mov word ptr [bp-38], 0
|
|
||||||
mov word ptr [bp-36], 0
|
|
||||||
mov word ptr [bp-34], 0
|
|
||||||
|
|
||||||
; Map scanInfo spectdata block len 10h -> [bp-32]
|
|
||||||
push 0
|
|
||||||
push 10H
|
|
||||||
push ss
|
|
||||||
lea ax, -48[bp]
|
|
||||||
push ax
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
call dword ptr [bp-8]
|
|
||||||
add sp, 0cH
|
|
||||||
mov [bp-32], ax
|
|
||||||
mov [bp-30], dx
|
|
||||||
|
|
||||||
; Map resultRef/output len4 -> [bp-56] (this is w95mconn caller ptr)
|
|
||||||
push 0
|
|
||||||
push 4
|
|
||||||
push ss
|
|
||||||
lea ax, -20[bp]
|
|
||||||
push ax
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
call dword ptr [bp-8]
|
|
||||||
add sp, 0cH
|
|
||||||
mov [bp-56], ax
|
|
||||||
mov [bp-54], dx
|
|
||||||
|
|
||||||
; Map connReference local len4 -> [bp-60]
|
|
||||||
push 0
|
|
||||||
push 4
|
|
||||||
push ss
|
|
||||||
lea ax, -24[bp]
|
|
||||||
push ax
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
call dword ptr [bp-8]
|
|
||||||
add sp, 0cH
|
|
||||||
mov [bp-60], ax
|
|
||||||
mov [bp-58], dx
|
|
||||||
|
|
||||||
; Raw CONNScanInfo via NIOS, following d32wrap _CONNScanInfo
|
|
||||||
; argument order from d32conni L$115.
|
|
||||||
push word ptr [bp-58] ; connReference flat high
|
|
||||||
push word ptr [bp-60] ; connReference flat low
|
|
||||||
|
|
||||||
push 0 ; returnConnInfo flat high = NULL
|
|
||||||
push 0 ; returnConnInfo flat low = NULL
|
|
||||||
|
|
||||||
push 0 ; returnInfoLen high
|
|
||||||
push 0 ; returnInfoLen low
|
|
||||||
|
|
||||||
push 0 ; returnInfoLevel high
|
|
||||||
push 4 ; returnInfoLevel low, as d32conni L$115
|
|
||||||
|
|
||||||
push 0 ; scan flag high
|
|
||||||
push word ptr [bp+8] ; scan flag low
|
|
||||||
|
|
||||||
push word ptr [bp-30] ; scanInfo flat high
|
|
||||||
push word ptr [bp-32] ; scanInfo flat low
|
|
||||||
|
|
||||||
push 0 ; scanInfoLevel high
|
|
||||||
push 0aH ; scanInfoLevel low = SERVER_NAME
|
|
||||||
|
|
||||||
push word ptr [bp-54] ; scanIterator/result flat high
|
|
||||||
push word ptr [bp-56] ; scanIterator/result flat low
|
|
||||||
|
|
||||||
push 0fefeH
|
|
||||||
push 0fefeH
|
|
||||||
push 0fefeH
|
|
||||||
push 0fefeH
|
|
||||||
|
|
||||||
push 0
|
|
||||||
push 0aH
|
|
||||||
push word ptr [bp-14]
|
|
||||||
push word ptr [bp-16]
|
|
||||||
call dword ptr [bp-12]
|
|
||||||
add sp, 30H
|
|
||||||
|
|
||||||
mov [bp-64], ax
|
|
||||||
mov [bp-62], dx
|
|
||||||
|
|
||||||
; Unlock maps.
|
|
||||||
push 0
|
|
||||||
push 4
|
|
||||||
push word ptr [bp-58]
|
|
||||||
push word ptr [bp-60]
|
|
||||||
push 0
|
|
||||||
push 3
|
|
||||||
call dword ptr [bp-8]
|
|
||||||
add sp, 0cH
|
|
||||||
|
|
||||||
push 0
|
|
||||||
push 4
|
|
||||||
push word ptr [bp-54]
|
|
||||||
push word ptr [bp-56]
|
|
||||||
push 0
|
|
||||||
push 3
|
|
||||||
call dword ptr [bp-8]
|
|
||||||
add sp, 0cH
|
|
||||||
|
|
||||||
push 0
|
|
||||||
push 10H
|
|
||||||
push word ptr [bp-30]
|
|
||||||
push word ptr [bp-32]
|
|
||||||
push 0
|
|
||||||
push 3
|
|
||||||
call dword ptr [bp-8]
|
|
||||||
add sp, 0cH
|
|
||||||
|
|
||||||
push 0
|
|
||||||
push 31H
|
|
||||||
push word ptr [bp-26]
|
|
||||||
push word ptr [bp-28]
|
|
||||||
push 0
|
|
||||||
push 3
|
|
||||||
call dword ptr [bp-8]
|
|
||||||
add sp, 0cH
|
|
||||||
|
|
||||||
jmp short c32mapvar_store
|
|
||||||
|
|
||||||
c32mapvar_fail:
|
|
||||||
mov word ptr [bp-16], 0
|
|
||||||
mov word ptr [bp-14], 0
|
|
||||||
mov word ptr [bp-64], 0ffffH
|
|
||||||
mov word ptr [bp-62], 0ffffH
|
|
||||||
mov word ptr [bp-20], 0
|
|
||||||
mov word ptr [bp-18], 0
|
|
||||||
mov word ptr [bp-24], 0
|
|
||||||
mov word ptr [bp-22], 0
|
|
||||||
|
|
||||||
c32mapvar_store:
|
|
||||||
les di, dword ptr [bp+10]
|
|
||||||
|
|
||||||
mov ax, [bp-4]
|
|
||||||
mov es:[di+0], ax
|
|
||||||
mov ax, [bp-8]
|
|
||||||
mov es:[di+2], ax
|
|
||||||
mov ax, [bp-6]
|
|
||||||
mov es:[di+4], ax
|
|
||||||
mov ax, [bp-12]
|
|
||||||
mov es:[di+6], ax
|
|
||||||
mov ax, [bp-10]
|
|
||||||
mov es:[di+8], ax
|
|
||||||
mov ax, [bp-16]
|
|
||||||
mov es:[di+10], ax
|
|
||||||
mov ax, [bp-14]
|
|
||||||
mov es:[di+12], ax
|
|
||||||
mov ax, [bp-64]
|
|
||||||
mov es:[di+14], ax
|
|
||||||
mov ax, [bp-62]
|
|
||||||
mov es:[di+16], ax
|
|
||||||
mov ax, [bp-20]
|
|
||||||
mov es:[di+18], ax
|
|
||||||
mov ax, [bp-18]
|
|
||||||
mov es:[di+20], ax
|
|
||||||
mov ax, [bp-24]
|
|
||||||
mov es:[di+22], ax
|
|
||||||
mov ax, [bp-22]
|
|
||||||
mov es:[di+24], ax
|
|
||||||
|
|
||||||
pop di
|
|
||||||
pop si
|
|
||||||
pop es
|
|
||||||
pop ds
|
|
||||||
mov sp, bp
|
|
||||||
pop bp
|
|
||||||
xor ah, ah
|
|
||||||
ret
|
|
||||||
|
|
||||||
c32mapvar_name db 'CONNScanInfo',0
|
|
||||||
|
|
||||||
_ncp_mapvar_request endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; int ncp_raw_request(UI connLo, UI connHi,
|
|
||||||
; void *hdr, UI hdrLen,
|
|
||||||
; void *path, UI pathLen,
|
|
||||||
; void *rep0, UI rep0Len,
|
|
||||||
; void *rep1, UI rep1Len,
|
|
||||||
; void *outbuf)
|
|
||||||
;
|
|
||||||
; Sends a raw NCP request through the d32wrap-compatible 5-slot
|
|
||||||
; fragment tables: 5 * 8 = 0x28 bytes for request and reply.
|
|
||||||
_ncp_raw_request proc far
|
|
||||||
push bp
|
|
||||||
mov bp, sp
|
|
||||||
sub sp, 180
|
|
||||||
|
|
||||||
push ds
|
|
||||||
push es
|
|
||||||
push si
|
|
||||||
push di
|
|
||||||
|
|
||||||
; clear ESI/ECX
|
|
||||||
db 66h, 33h, 0F6h
|
|
||||||
db 66h, 33h, 0C9h
|
|
||||||
|
|
||||||
mov ax, 0D8C1h
|
|
||||||
int 2Fh
|
|
||||||
|
|
||||||
mov [bp-2], ax
|
|
||||||
db 66h, 89h, 76h, 0FAh ; resolver at [bp-6]
|
|
||||||
db 66h, 89h, 4Eh, 0F6h ; trampoline at [bp-10]
|
|
||||||
|
|
||||||
or ax, ax
|
|
||||||
jne raw_fail
|
|
||||||
|
|
||||||
; resolve COMPATNcpRequestReply
|
|
||||||
push cs
|
|
||||||
push offset raw_name
|
|
||||||
push 0
|
|
||||||
push 0
|
|
||||||
call dword ptr [bp-6]
|
|
||||||
add sp, 8
|
|
||||||
mov [bp-14], ax
|
|
||||||
mov [bp-12], dx
|
|
||||||
or ax, dx
|
|
||||||
jne raw_have_func
|
|
||||||
jmp raw_fail
|
|
||||||
|
|
||||||
raw_have_func:
|
|
||||||
; actual reply len dword at [bp-36]
|
|
||||||
mov word ptr [bp-36], 0
|
|
||||||
mov word ptr [bp-34], 0
|
|
||||||
|
|
||||||
; map hdr -> [bp-20]
|
|
||||||
push 0
|
|
||||||
push word ptr [bp+0eH]
|
|
||||||
push word ptr [bp+0cH]
|
|
||||||
push word ptr [bp+0aH]
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
call dword ptr [bp-6]
|
|
||||||
add sp, 0cH
|
|
||||||
mov [bp-20], ax
|
|
||||||
mov [bp-18], dx
|
|
||||||
|
|
||||||
; map path -> [bp-24]
|
|
||||||
push 0
|
|
||||||
push word ptr [bp+14H]
|
|
||||||
push word ptr [bp+12H]
|
|
||||||
push word ptr [bp+10H]
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
call dword ptr [bp-6]
|
|
||||||
add sp, 0cH
|
|
||||||
mov [bp-24], ax
|
|
||||||
mov [bp-22], dx
|
|
||||||
|
|
||||||
; map rep0 -> [bp-28]
|
|
||||||
push 0
|
|
||||||
push word ptr [bp+1aH]
|
|
||||||
push word ptr [bp+18H]
|
|
||||||
push word ptr [bp+16H]
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
call dword ptr [bp-6]
|
|
||||||
add sp, 0cH
|
|
||||||
mov [bp-28], ax
|
|
||||||
mov [bp-26], dx
|
|
||||||
|
|
||||||
; map rep1 -> [bp-32]
|
|
||||||
push 0
|
|
||||||
push word ptr [bp+20H]
|
|
||||||
push word ptr [bp+1eH]
|
|
||||||
push word ptr [bp+1cH]
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
call dword ptr [bp-6]
|
|
||||||
add sp, 0cH
|
|
||||||
mov [bp-32], ax
|
|
||||||
mov [bp-30], dx
|
|
||||||
|
|
||||||
; zero req table [bp-160] len 40 and reply table [bp-120] len 40
|
|
||||||
push ss
|
|
||||||
pop es
|
|
||||||
cld
|
|
||||||
xor ax, ax
|
|
||||||
lea di, -160[bp]
|
|
||||||
mov cx, 20
|
|
||||||
rep stosw
|
|
||||||
lea di, -120[bp]
|
|
||||||
mov cx, 20
|
|
||||||
rep stosw
|
|
||||||
|
|
||||||
; req entry0 = hdr
|
|
||||||
mov ax, [bp-20]
|
|
||||||
mov [bp-160], ax
|
|
||||||
mov ax, [bp-18]
|
|
||||||
mov [bp-158], ax
|
|
||||||
mov ax, [bp+0eH]
|
|
||||||
mov [bp-156], ax
|
|
||||||
mov word ptr [bp-154], 0
|
|
||||||
|
|
||||||
; req entry1 = path
|
|
||||||
mov ax, [bp-24]
|
|
||||||
mov [bp-152], ax
|
|
||||||
mov ax, [bp-22]
|
|
||||||
mov [bp-150], ax
|
|
||||||
mov ax, [bp+14H]
|
|
||||||
mov [bp-148], ax
|
|
||||||
mov word ptr [bp-146], 0
|
|
||||||
|
|
||||||
; reply entry0 = rep0
|
|
||||||
mov ax, [bp-28]
|
|
||||||
mov [bp-120], ax
|
|
||||||
mov ax, [bp-26]
|
|
||||||
mov [bp-118], ax
|
|
||||||
mov ax, [bp+1aH]
|
|
||||||
mov [bp-116], ax
|
|
||||||
mov word ptr [bp-114], 0
|
|
||||||
|
|
||||||
; reply entry1 = rep1
|
|
||||||
mov ax, [bp-32]
|
|
||||||
mov [bp-112], ax
|
|
||||||
mov ax, [bp-30]
|
|
||||||
mov [bp-110], ax
|
|
||||||
mov ax, [bp+20H]
|
|
||||||
mov [bp-108], ax
|
|
||||||
mov word ptr [bp-106], 0
|
|
||||||
|
|
||||||
; map req table 0x28 -> [bp-40]
|
|
||||||
push 0
|
|
||||||
push 28H
|
|
||||||
push ss
|
|
||||||
lea ax, -160[bp]
|
|
||||||
push ax
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
call dword ptr [bp-6]
|
|
||||||
add sp, 0cH
|
|
||||||
mov [bp-40], ax
|
|
||||||
mov [bp-38], dx
|
|
||||||
|
|
||||||
; map reply table 0x28 -> [bp-44]
|
|
||||||
push 0
|
|
||||||
push 28H
|
|
||||||
push ss
|
|
||||||
lea ax, -120[bp]
|
|
||||||
push ax
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
call dword ptr [bp-6]
|
|
||||||
add sp, 0cH
|
|
||||||
mov [bp-44], ax
|
|
||||||
mov [bp-42], dx
|
|
||||||
|
|
||||||
; map actual reply len -> [bp-48]
|
|
||||||
push 0
|
|
||||||
push 4
|
|
||||||
push ss
|
|
||||||
lea ax, -36[bp]
|
|
||||||
push ax
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
call dword ptr [bp-6]
|
|
||||||
add sp, 0cH
|
|
||||||
mov [bp-48], ax
|
|
||||||
mov [bp-46], dx
|
|
||||||
|
|
||||||
; call COMPAT via NIOS command 8
|
|
||||||
push word ptr [bp-46]
|
|
||||||
push word ptr [bp-48]
|
|
||||||
push word ptr [bp-42]
|
|
||||||
push word ptr [bp-44]
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
push word ptr [bp-38]
|
|
||||||
push word ptr [bp-40]
|
|
||||||
push 0
|
|
||||||
push 2
|
|
||||||
push 0
|
|
||||||
push 57H
|
|
||||||
push 0
|
|
||||||
push 0
|
|
||||||
push word ptr [bp+8]
|
|
||||||
push word ptr [bp+6]
|
|
||||||
push 0
|
|
||||||
push 8
|
|
||||||
push word ptr [bp-12]
|
|
||||||
push word ptr [bp-14]
|
|
||||||
call dword ptr [bp-10]
|
|
||||||
add sp, 28H
|
|
||||||
|
|
||||||
mov [bp-52], ax
|
|
||||||
mov [bp-50], dx
|
|
||||||
|
|
||||||
; unlock important mappings only; ignore return
|
|
||||||
push 0
|
|
||||||
push 4
|
|
||||||
push word ptr [bp-46]
|
|
||||||
push word ptr [bp-48]
|
|
||||||
push 0
|
|
||||||
push 3
|
|
||||||
call dword ptr [bp-6]
|
|
||||||
add sp, 0cH
|
|
||||||
|
|
||||||
push 0
|
|
||||||
push 28H
|
|
||||||
push word ptr [bp-42]
|
|
||||||
push word ptr [bp-44]
|
|
||||||
push 0
|
|
||||||
push 3
|
|
||||||
call dword ptr [bp-6]
|
|
||||||
add sp, 0cH
|
|
||||||
|
|
||||||
push 0
|
|
||||||
push 28H
|
|
||||||
push word ptr [bp-38]
|
|
||||||
push word ptr [bp-40]
|
|
||||||
push 0
|
|
||||||
push 3
|
|
||||||
call dword ptr [bp-6]
|
|
||||||
add sp, 0cH
|
|
||||||
|
|
||||||
jmp short raw_store
|
|
||||||
|
|
||||||
raw_fail:
|
|
||||||
mov word ptr [bp-14], 0
|
|
||||||
mov word ptr [bp-12], 0
|
|
||||||
mov word ptr [bp-52], 0ffffH
|
|
||||||
mov word ptr [bp-50], 0ffffH
|
|
||||||
mov word ptr [bp-36], 0
|
|
||||||
mov word ptr [bp-34], 0
|
|
||||||
|
|
||||||
raw_store:
|
|
||||||
les di, dword ptr [bp+22H]
|
|
||||||
mov ax, [bp-2]
|
|
||||||
mov es:[di+0], ax
|
|
||||||
mov ax, [bp-6]
|
|
||||||
mov es:[di+2], ax
|
|
||||||
mov ax, [bp-4]
|
|
||||||
mov es:[di+4], ax
|
|
||||||
mov ax, [bp-10]
|
|
||||||
mov es:[di+6], ax
|
|
||||||
mov ax, [bp-8]
|
|
||||||
mov es:[di+8], ax
|
|
||||||
mov ax, [bp-14]
|
|
||||||
mov es:[di+10], ax
|
|
||||||
mov ax, [bp-12]
|
|
||||||
mov es:[di+12], ax
|
|
||||||
mov ax, [bp-52]
|
|
||||||
mov es:[di+14], ax
|
|
||||||
mov ax, [bp-50]
|
|
||||||
mov es:[di+16], ax
|
|
||||||
mov ax, [bp-36]
|
|
||||||
mov es:[di+18], ax
|
|
||||||
mov ax, [bp-34]
|
|
||||||
mov es:[di+20], ax
|
|
||||||
|
|
||||||
pop di
|
|
||||||
pop si
|
|
||||||
pop es
|
|
||||||
pop ds
|
|
||||||
mov sp, bp
|
|
||||||
pop bp
|
|
||||||
xor ah, ah
|
|
||||||
ret
|
|
||||||
|
|
||||||
raw_name db 'COMPATNcpRequestReply',0
|
|
||||||
|
|
||||||
_ncp_raw_request endp
|
|
||||||
|
|
||||||
end
|
|
||||||
47
ncp.h
47
ncp.h
@@ -1,47 +0,0 @@
|
|||||||
/*
|
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
* Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: C declarations for low-level NetWare requester and Client32 transport assembly glue.
|
|
||||||
* Depends on: ncp.asm for Open Watcom builds, ncpcall.c transport helpers, and net.h for shared types.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NCP_H
|
|
||||||
#define NCP_H
|
|
||||||
|
|
||||||
#if defined(__WATCOMC__)
|
|
||||||
#define NCP_CALL _Cdecl
|
|
||||||
#else
|
|
||||||
#define NCP_CALL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern int NCP_CALL Net_Call(UI func, void *req, void *repl);
|
|
||||||
extern int NCP_CALL ncp_mapvar_request(UI specLen, UI flag, void *outbuf);
|
|
||||||
extern int NCP_CALL ncp_openref_request(UI refLo, UI refHi, void *outbuf);
|
|
||||||
extern int NCP_CALL ncp_raw_request(UI connLo, UI connHi,
|
|
||||||
void *hdr, UI hdrLen,
|
|
||||||
void *path, UI pathLen,
|
|
||||||
void *rep0, UI rep0Len,
|
|
||||||
void *rep1, UI rep1Len,
|
|
||||||
void *outbuf);
|
|
||||||
|
|
||||||
#undef NCP_CALL
|
|
||||||
|
|
||||||
#endif /* NCP_H */
|
|
||||||
202
ncpapi.h
202
ncpapi.h
@@ -1,202 +0,0 @@
|
|||||||
/*
|
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: Public declarations for namespace and file-system NCP API helpers.
|
|
||||||
* Depends on: net.h data types and ncpapi.c implementation.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* ncpapi.h - NetWare/NCP protocol API helpers for mars-dosutils */
|
|
||||||
|
|
||||||
#ifndef NCPAPI_H
|
|
||||||
#define NCPAPI_H
|
|
||||||
|
|
||||||
UI ncp_build_handle_path(uint8 *buf, uint8 dhandle,
|
|
||||||
uint16 dirbase, uint8 style,
|
|
||||||
int count,
|
|
||||||
const char *c1, const char *c2, const char *c3);
|
|
||||||
UI ncp_build_handle_path_from_dos_path(uint8 *buf, uint8 dhandle,
|
|
||||||
uint16 dirbase, uint8 style,
|
|
||||||
const char *dospath);
|
|
||||||
int ncp_get_requester_handle(uint16 *handle_lo, uint16 *handle_hi);
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct ncp_file_handle6 {
|
|
||||||
uint8 h[6];
|
|
||||||
} NCP_FILE_HANDLE6;
|
|
||||||
|
|
||||||
#define NCP_OC_MODE_OPEN 0x01
|
|
||||||
#define NCP_OC_MODE_TRUNCATE 0x02
|
|
||||||
#define NCP_OC_MODE_CREATE 0x08
|
|
||||||
|
|
||||||
#define NCP_DAR_READ 0x0001
|
|
||||||
#define NCP_DAR_WRITE 0x0002
|
|
||||||
#define NCP_DAR_DENY_READ 0x0004
|
|
||||||
#define NCP_DAR_DENY_WRITE 0x0008
|
|
||||||
#define NCP_DAR_COMPAT 0x0010
|
|
||||||
|
|
||||||
int ncp87_01_open_create_entry(const char *path_name,
|
|
||||||
uint16 dir_handle,
|
|
||||||
uint8 open_create_mode,
|
|
||||||
uint32 create_attrs,
|
|
||||||
uint16 desired_access,
|
|
||||||
uint16 search_attrs,
|
|
||||||
NCP_FILE_HANDLE6 *handle_out,
|
|
||||||
uint32 *file_size_out,
|
|
||||||
uint8 *open_create_action_out,
|
|
||||||
uint16 *actual_out,
|
|
||||||
uint16 *handle_lo_out,
|
|
||||||
uint16 *handle_hi_out);
|
|
||||||
|
|
||||||
int ncp74_file_server_copy(const NCP_FILE_HANDLE6 *src,
|
|
||||||
const NCP_FILE_HANDLE6 *dst,
|
|
||||||
uint32 src_offset,
|
|
||||||
uint32 dst_offset,
|
|
||||||
uint32 count,
|
|
||||||
uint32 *copied_out);
|
|
||||||
|
|
||||||
int ncp66_close_file(const NCP_FILE_HANDLE6 *handle);
|
|
||||||
|
|
||||||
|
|
||||||
int ncp87_06_obtain_rim_attributes(const char *name,
|
|
||||||
uint16 dir_handle,
|
|
||||||
uint32 *attr_out,
|
|
||||||
uint16 *actual_out,
|
|
||||||
uint16 *handle_lo_out,
|
|
||||||
uint16 *handle_hi_out);
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct ncp_dos_modify_info {
|
|
||||||
uint32 attributes;
|
|
||||||
uint16 creation_time;
|
|
||||||
uint16 creation_date;
|
|
||||||
uint32 creator_id;
|
|
||||||
uint16 modify_time;
|
|
||||||
uint16 modify_date;
|
|
||||||
uint32 modifier_id;
|
|
||||||
uint16 last_access_date;
|
|
||||||
uint16 archive_time;
|
|
||||||
uint16 archive_date;
|
|
||||||
uint32 archiver_id;
|
|
||||||
uint16 inherited_rights;
|
|
||||||
uint32 maximum_space;
|
|
||||||
} NCP_DOS_MODIFY_INFO;
|
|
||||||
|
|
||||||
typedef struct ncp_ndir_info {
|
|
||||||
uint32 space_allocated;
|
|
||||||
uint32 attributes;
|
|
||||||
uint16 flags;
|
|
||||||
uint32 data_size;
|
|
||||||
uint32 total_size;
|
|
||||||
uint16 number_of_streams;
|
|
||||||
uint16 creation_time;
|
|
||||||
uint16 creation_date;
|
|
||||||
uint32 creator_id;
|
|
||||||
uint16 modify_time;
|
|
||||||
uint16 modify_date;
|
|
||||||
uint32 modifier_id;
|
|
||||||
uint16 last_access_date;
|
|
||||||
uint16 archive_time;
|
|
||||||
uint16 archive_date;
|
|
||||||
uint32 archiver_id;
|
|
||||||
uint16 inherited_rights;
|
|
||||||
uint32 dir_ent_num;
|
|
||||||
uint32 dos_dir_num;
|
|
||||||
uint32 vol_number;
|
|
||||||
uint32 ea_data_size;
|
|
||||||
uint32 ea_key_count;
|
|
||||||
uint32 ea_key_size;
|
|
||||||
uint32 ns_creator;
|
|
||||||
uint8 name_len;
|
|
||||||
char name[256];
|
|
||||||
} NCP_NDIR_INFO;
|
|
||||||
|
|
||||||
int ncp87_06_obtain_ndir_info(const char *path_name,
|
|
||||||
uint16 dir_handle,
|
|
||||||
NCP_NDIR_INFO *info_out,
|
|
||||||
uint16 *actual_out,
|
|
||||||
uint16 *handle_lo_out,
|
|
||||||
uint16 *handle_hi_out);
|
|
||||||
|
|
||||||
|
|
||||||
int ncp87_07_modify_dos_attributes(char *name,
|
|
||||||
uint16 dir_handle,
|
|
||||||
uint32 attrs,
|
|
||||||
uint16 *actual_out,
|
|
||||||
uint16 *handle_lo_out,
|
|
||||||
uint16 *handle_hi_out);
|
|
||||||
|
|
||||||
int ncp87_07_modify_dos_info(const char *name,
|
|
||||||
uint16 dir_handle,
|
|
||||||
uint32 change_mask,
|
|
||||||
NCP_DOS_MODIFY_INFO *info,
|
|
||||||
uint16 *actual_out,
|
|
||||||
uint16 *handle_lo_out,
|
|
||||||
uint16 *handle_hi_out);
|
|
||||||
|
|
||||||
int ncp87_1d_get_effective_rights(const char *path,
|
|
||||||
uint16 dir_handle,
|
|
||||||
uint16 *rights_out,
|
|
||||||
uint16 *actual_out,
|
|
||||||
uint16 *handle_lo_out,
|
|
||||||
uint16 *handle_hi_out);
|
|
||||||
|
|
||||||
|
|
||||||
int ncp87_1d_get_effective_rights_by_dirent(uint8 vol_number,
|
|
||||||
uint32 dos_dir_number,
|
|
||||||
uint16 *rights_out,
|
|
||||||
uint16 *actual_out,
|
|
||||||
uint16 *handle_lo_out,
|
|
||||||
uint16 *handle_hi_out);
|
|
||||||
|
|
||||||
int ncp87_0a_add_trustee_rights(const char *path_name,
|
|
||||||
uint16 dir_handle,
|
|
||||||
uint32 object_id,
|
|
||||||
uint16 rights,
|
|
||||||
uint16 rights_mask,
|
|
||||||
uint16 *actual_out,
|
|
||||||
uint16 *handle_lo_out,
|
|
||||||
uint16 *handle_hi_out);
|
|
||||||
|
|
||||||
int ncp22_27_set_trustee_rights(const char *path_name,
|
|
||||||
uint16 dir_handle,
|
|
||||||
uint32 object_id,
|
|
||||||
uint16 rights);
|
|
||||||
|
|
||||||
int ncp22_2b_delete_trustee_rights(const char *path_name,
|
|
||||||
uint16 dir_handle,
|
|
||||||
uint32 object_id);
|
|
||||||
|
|
||||||
int ncp87_05_find_trustee_rights(const char *path_name,
|
|
||||||
uint16 dir_handle,
|
|
||||||
uint32 object_id,
|
|
||||||
uint16 *rights_out,
|
|
||||||
uint16 *actual_out,
|
|
||||||
uint16 *handle_lo_out,
|
|
||||||
uint16 *handle_hi_out);
|
|
||||||
|
|
||||||
int ncp87_0b_delete_trustee_rights(const char *path_name,
|
|
||||||
uint16 dir_handle,
|
|
||||||
uint32 object_id,
|
|
||||||
uint16 *actual_out,
|
|
||||||
uint16 *handle_lo_out,
|
|
||||||
uint16 *handle_hi_out);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
514
ncpcall.c
514
ncpcall.c
@@ -1,269 +1,285 @@
|
|||||||
/*
|
/* ncpcall.c 14-Mar-96 */
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
* Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/****************************************************************
|
||||||
* Purpose: Low-level NCP requester and Client32 transport helpers for the NetWare DOS tools.
|
* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany *
|
||||||
* Depends on: net.h, ncpapi.h, netcall.c requester glue, and ncp.asm/doc/kern.asm Net_Call/Client32 request entry points.
|
****************************************************************/
|
||||||
*
|
|
||||||
* The public ncpXX_YY_* protocol wrappers live in ncpapi.c. This file keeps
|
|
||||||
* the lower-level requester/transport helpers used by those API wrappers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "ncpapi.h"
|
|
||||||
|
|
||||||
/* Client32 raw requester transport helpers used by the NCP API wrappers. */
|
/* ---------------- 0x16 ----------------------------------- */
|
||||||
|
int ncp_16_02(int dirhandle,
|
||||||
|
uint8 *path,
|
||||||
|
int *sub_dir,
|
||||||
|
uint8 *resultpath,
|
||||||
|
uint32 *creattime,
|
||||||
|
uint32 *owner_id)
|
||||||
|
|
||||||
/*
|
/* returns max. rights or -1 if failed */
|
||||||
* ncp_build_handle_path
|
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* Builds the Client32-compatible NWHandlePathStruct used by NCP87 request
|
|
||||||
* wrappers when the caller already has one to three path components.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* dhandle/dirbase/style describe the starting directory context. c1..c3
|
|
||||||
* are written as length-prefixed path components.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* Number of bytes used by the path structure.
|
|
||||||
*/
|
|
||||||
UI ncp_build_handle_path(uint8 *buf, uint8 dhandle,
|
|
||||||
uint16 dirbase, uint8 style,
|
|
||||||
int count,
|
|
||||||
const char *c1, const char *c2, const char *c3)
|
|
||||||
{
|
{
|
||||||
uint8 *p;
|
struct {
|
||||||
int l;
|
uint16 len;
|
||||||
UI used;
|
uint8 func;
|
||||||
|
uint8 dirhandle;
|
||||||
/*
|
uint8 sub_dir[2];
|
||||||
* DeveloperNet/ncpdos16 path structure used by NCP87/S6 through
|
uint8 pathlen;
|
||||||
* Client32 COMPATNcpRequestReply.
|
uint8 path[256];
|
||||||
*
|
} req;
|
||||||
* This is the exact shape verified by TESTS NCP87C32AUTO:
|
struct {
|
||||||
* 00 02 00 00 00 00 01 09 4C 4F 47 49 4E 2E 45 58 45
|
uint16 len;
|
||||||
*
|
uint8 sub_dir_name[16];
|
||||||
* Meaning:
|
uint8 create_date_time[4];
|
||||||
* word[1] = short dir handle
|
uint8 owner_id[4]; /* HI LOW */
|
||||||
* word[3] = dir base
|
uint8 max_right_mask;
|
||||||
* byte[5] = dirstyle
|
uint8 reserved; /* Reserved by Novell */
|
||||||
* byte[6] = component count
|
uint8 sub_dir_nmbr[2]; /* HI LOW */
|
||||||
* then len/name components
|
} repl = { sizeof(repl) - sizeof(uint16) };
|
||||||
*
|
req.func = 0x02;
|
||||||
* The old/simple struct used by the INT 21h F257 fallback is not accepted
|
U16_TO_BE16((sub_dir) ? *sub_dir : 1, req.sub_dir);
|
||||||
* by this Client32 path.
|
req.dirhandle = (uint8) dirhandle;
|
||||||
*/
|
req.pathlen = (uint8) ((path) ? strlen(path) : 0);
|
||||||
memset(buf, 0, 0x140);
|
req.len = 5 + req.pathlen;
|
||||||
|
strmaxcpy(req.path, path, req.pathlen);
|
||||||
if (dhandle) {
|
neterrno = Net_Call(0xE200, &req, &repl);
|
||||||
tool_put_word_lh(buf + 1, (uint16)dhandle);
|
if (neterrno) return(-1);
|
||||||
tool_put_word_lh(buf + 3, dirbase);
|
if (resultpath) strmaxcpy(resultpath, repl.sub_dir_name, 16);
|
||||||
buf[5] = style;
|
if (sub_dir) *sub_dir = GET_BE16(repl.sub_dir_nmbr);
|
||||||
} else {
|
if (creattime) *creattime = GET_BE32(repl.create_date_time);
|
||||||
buf[5] = 0xff;
|
if (owner_id) *owner_id = GET_BE32(repl.owner_id);
|
||||||
}
|
return((int) repl.max_right_mask);
|
||||||
|
|
||||||
p = buf + 6;
|
|
||||||
*p++ = (uint8)count;
|
|
||||||
|
|
||||||
if (count > 0 && c1) {
|
|
||||||
l = strlen(c1);
|
|
||||||
if (l > 255) l = 255;
|
|
||||||
*p++ = (uint8)l;
|
|
||||||
memcpy(p, c1, l);
|
|
||||||
p += l;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count > 1 && c2) {
|
|
||||||
l = strlen(c2);
|
|
||||||
if (l > 255) l = 255;
|
|
||||||
*p++ = (uint8)l;
|
|
||||||
memcpy(p, c2, l);
|
|
||||||
p += l;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count > 2 && c3) {
|
|
||||||
l = strlen(c3);
|
|
||||||
if (l > 255) l = 255;
|
|
||||||
*p++ = (uint8)l;
|
|
||||||
memcpy(p, c3, l);
|
|
||||||
p += l;
|
|
||||||
}
|
|
||||||
|
|
||||||
used = (UI)(p - buf);
|
|
||||||
tool_put_word_lh(buf + 0x13c, used);
|
|
||||||
return(used);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ---------------- 0x17 ----------------------------------- */
|
||||||
/*
|
int ncp_17_02(int module, int debuglevel)
|
||||||
* ncp_build_handle_path_from_dos_path
|
/* debuglevel fuer module setzen */
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* Converts a DOS-style path string into the Client32-compatible
|
|
||||||
* NWHandlePathStruct used by the NCP87 wrappers.
|
|
||||||
*
|
|
||||||
* Notes:
|
|
||||||
* Drive prefixes, leading slashes and simple current-directory components
|
|
||||||
* are skipped so tool callers can pass ordinary DOS paths.
|
|
||||||
*/
|
|
||||||
UI ncp_build_handle_path_from_dos_path(uint8 *buf, uint8 dhandle,
|
|
||||||
uint16 dirbase, uint8 style,
|
|
||||||
const char *dospath)
|
|
||||||
{
|
{
|
||||||
uint8 *p;
|
struct {
|
||||||
uint8 *countp;
|
uint16 len;
|
||||||
int count = 0;
|
uint8 func;
|
||||||
const char *s;
|
uint8 module;
|
||||||
UI used;
|
uint8 debug;
|
||||||
|
} req = { sizeof(req) - sizeof(uint16) };
|
||||||
memset(buf, 0, 0x140);
|
struct {
|
||||||
|
uint16 len;
|
||||||
if (dhandle) {
|
uint8 olddebug;
|
||||||
tool_put_word_lh(buf + 1, (uint16)dhandle);
|
} repl = { sizeof(repl) - sizeof(uint16) };
|
||||||
tool_put_word_lh(buf + 3, dirbase);
|
req.func = 0x2;
|
||||||
buf[5] = style;
|
req.module = (uint8) module;
|
||||||
} else {
|
req.debug = (uint8) debuglevel;
|
||||||
buf[5] = 0xff;
|
neterrno = Net_Call(0xE300, &req, &repl);
|
||||||
}
|
if (neterrno) return(-1);
|
||||||
|
return((int) repl.olddebug);
|
||||||
p = buf + 6;
|
|
||||||
countp = p++;
|
|
||||||
|
|
||||||
s = dospath;
|
|
||||||
if (!s) s = "";
|
|
||||||
|
|
||||||
/*
|
|
||||||
* DOS tools mostly pass relative paths against the current directory
|
|
||||||
* handle. Accept simple DOS decoration here so RIGHTS can pass "." or
|
|
||||||
* ".\\UDIR\\FILE" without constructing path components in the caller.
|
|
||||||
*/
|
|
||||||
if (s[0] && s[1] == ':')
|
|
||||||
s += 2;
|
|
||||||
|
|
||||||
while (*s == '\\' || *s == '/')
|
|
||||||
s++;
|
|
||||||
|
|
||||||
while (*s && p < buf + 0x138 && count < 32) {
|
|
||||||
const char *start;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
while (*s == '\\' || *s == '/')
|
|
||||||
s++;
|
|
||||||
|
|
||||||
if (*s == '.'
|
|
||||||
&& (s[1] == '\0' || s[1] == '\\' || s[1] == '/')) {
|
|
||||||
s++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
start = s;
|
|
||||||
while (*s && *s != '\\' && *s != '/')
|
|
||||||
s++;
|
|
||||||
|
|
||||||
len = (int)(s - start);
|
|
||||||
if (len <= 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (len > 255)
|
|
||||||
len = 255;
|
|
||||||
|
|
||||||
if (p + 1 + len >= buf + 0x138)
|
|
||||||
break;
|
|
||||||
|
|
||||||
*p++ = (uint8)len;
|
|
||||||
memcpy(p, start, len);
|
|
||||||
p += len;
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
*countp = (uint8)count;
|
|
||||||
|
|
||||||
used = (UI)(p - buf);
|
|
||||||
tool_put_word_lh(buf + 0x13c, used);
|
|
||||||
return(used);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ncp_17_14(uint8 *objname, uint16 objtyp, uint8 *password)
|
||||||
/*
|
/* login unencreypted */
|
||||||
* Current verified Client32 path for mars-nwe DOS utilities:
|
|
||||||
*
|
|
||||||
* ncp_mapvar_request(4,0) -> connRefLocal FFFF:FFFE
|
|
||||||
* ncp_openref_request(connRefLocal) -> Client32 handle, e.g. 0101:0001
|
|
||||||
*
|
|
||||||
* ncp_mapvar_request currently contains the confirmed Mars server-name scan
|
|
||||||
* shape. It is intentionally kept small and isolated here so FLAG and later
|
|
||||||
* tools do not carry the old exploratory tests.
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* ncp_get_requester_handle
|
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* Resolves the active MARS/NetWare connection into the Client32 NCP handle
|
|
||||||
* used by the raw requester path.
|
|
||||||
*
|
|
||||||
* Requester path:
|
|
||||||
* ncp_mapvar_request followed by ncp_openref_request.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* 0 on success. Non-zero values indicate that the connection reference or
|
|
||||||
* Client32 NCP handle could not be obtained.
|
|
||||||
*/
|
|
||||||
int ncp_get_requester_handle(uint16 *handle_lo, uint16 *handle_hi)
|
|
||||||
{
|
{
|
||||||
uint8 mapout[32];
|
struct {
|
||||||
uint8 openout[32];
|
uint16 len;
|
||||||
uint16 map_ret_ax, map_ret_dx;
|
uint8 func;
|
||||||
uint16 cref_lo, cref_hi;
|
uint8 typ[2];
|
||||||
uint16 open_ret_ax, open_ret_dx;
|
uint8 namlen;
|
||||||
|
uint8 buff[48+1+128];
|
||||||
|
} req;
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
} repl= { 0 };
|
||||||
|
uint8 *p=req.buff;
|
||||||
|
req.func = 0x14;
|
||||||
|
U16_TO_BE16(objtyp, req.typ);
|
||||||
|
req.namlen = min(47, strlen(objname));
|
||||||
|
memcpy(p, objname, req.namlen);
|
||||||
|
p += req.namlen;
|
||||||
|
*p = (uint8) min(128, strlen(password));
|
||||||
|
req.len = 4 + req.namlen + 1 + *p;
|
||||||
|
memcpy(p+1, password, (int) *p);
|
||||||
|
neterrno = Net_Call(0xE300, &req, &repl);
|
||||||
|
if (neterrno) return(-1);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
if (!handle_lo || !handle_hi)
|
int ncp_17_17(uint8 *key)
|
||||||
return(1);
|
/* get crypt key */
|
||||||
|
{
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
uint8 func;
|
||||||
|
} req;
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
uint8 key[8];
|
||||||
|
} repl;
|
||||||
|
req.len = 1;
|
||||||
|
req.func = 0x17;
|
||||||
|
repl.len = 8;
|
||||||
|
neterrno = Net_Call(0xE300, &req, &repl);
|
||||||
|
if (neterrno) return(-1);
|
||||||
|
else {
|
||||||
|
memcpy(key, repl.key, 8);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
*handle_lo = 0;
|
int ncp_17_18(uint8 *cryptkey, uint8 *objname, uint16 objtyp)
|
||||||
*handle_hi = 0;
|
/* keyed login */
|
||||||
|
{
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
uint8 func;
|
||||||
|
uint8 key[8];
|
||||||
|
uint8 typ[2];
|
||||||
|
uint8 namlen;
|
||||||
|
uint8 name[48];
|
||||||
|
} req;
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
} repl={ 0 };
|
||||||
|
req.len = sizeof(req) - sizeof(uint16);
|
||||||
|
req.func = 0x18;
|
||||||
|
U16_TO_BE16(objtyp, req.typ);
|
||||||
|
req.namlen = min(sizeof(req.name), strlen(objname));
|
||||||
|
memcpy(req.key, cryptkey, 8);
|
||||||
|
memcpy(req.name, objname, (int) req.namlen);
|
||||||
|
neterrno = Net_Call(0xE300, &req, &repl);
|
||||||
|
if (neterrno) return(-1);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
memset(mapout, 0, sizeof(mapout));
|
uint32 ncp_17_35(uint8 *objname, uint16 objtyp)
|
||||||
ncp_mapvar_request(4, 0, mapout);
|
/* get bindery object id */
|
||||||
|
{
|
||||||
map_ret_ax = tool_get_word_lh(mapout + 14);
|
struct {
|
||||||
map_ret_dx = tool_get_word_lh(mapout + 16);
|
uint16 len;
|
||||||
cref_lo = tool_get_word_lh(mapout + 22);
|
uint8 func;
|
||||||
cref_hi = tool_get_word_lh(mapout + 24);
|
uint8 typ[2];
|
||||||
|
uint8 namlen;
|
||||||
if (map_ret_ax != 0 || map_ret_dx != 0 || (cref_lo == 0 && cref_hi == 0))
|
uint8 name[48];
|
||||||
return(2);
|
} req;
|
||||||
|
struct {
|
||||||
memset(openout, 0, sizeof(openout));
|
uint16 len;
|
||||||
ncp_openref_request(cref_lo, cref_hi, openout);
|
uint8 object_id[4];
|
||||||
|
uint8 object_type[2];
|
||||||
open_ret_ax = tool_get_word_lh(openout + 14);
|
uint8 object_name[48];
|
||||||
open_ret_dx = tool_get_word_lh(openout + 16);
|
} repl;
|
||||||
*handle_lo = tool_get_word_lh(openout + 18);
|
req.len = sizeof(req) - sizeof(uint16);
|
||||||
*handle_hi = tool_get_word_lh(openout + 20);
|
repl.len = sizeof(repl) - sizeof(uint16);
|
||||||
|
req.func = 0x35;
|
||||||
if (open_ret_ax != 0 || open_ret_dx != 0 || (*handle_lo == 0 && *handle_hi == 0))
|
U16_TO_BE16(objtyp, req.typ);
|
||||||
return(3);
|
req.namlen = min(sizeof(req.name), strlen(objname));
|
||||||
|
memcpy(req.name, objname, (int) req.namlen);
|
||||||
|
neterrno = Net_Call(0xE300, &req, &repl);
|
||||||
|
if (neterrno) return(0L);
|
||||||
|
strmaxcpy(objname, repl.object_name, 47);
|
||||||
|
return(GET_BE32(repl.object_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
int ncp_17_36(uint32 obj_id, uint8 *objname, uint16 *objtyp)
|
||||||
|
/* get bindery object name */
|
||||||
|
{
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
uint8 func;
|
||||||
|
uint8 id[4];
|
||||||
|
} req;
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
uint8 object_id[4];
|
||||||
|
uint8 object_type[2];
|
||||||
|
uint8 object_name[48];
|
||||||
|
} repl;
|
||||||
|
req.len = sizeof(req) - sizeof(uint16);
|
||||||
|
repl.len = sizeof(repl) - sizeof(uint16);
|
||||||
|
req.func = 0x36;
|
||||||
|
U32_TO_BE32(obj_id, req.id);
|
||||||
|
neterrno = Net_Call(0xE300, &req, &repl);
|
||||||
|
if (neterrno) return(-1);
|
||||||
|
if (objname) strmaxcpy(objname, repl.object_name, 47);
|
||||||
|
if (objtyp) *objtyp = GET_BE16(repl.object_type);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ncp_17_40(uint8 *objname, uint16 objtyp,
|
||||||
|
uint8 *password, uint8 *newpassword)
|
||||||
|
/* change password unencreypted */
|
||||||
|
{
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
uint8 func;
|
||||||
|
uint8 typ[2];
|
||||||
|
uint8 namlen;
|
||||||
|
uint8 buff[48+1+128+1+128];
|
||||||
|
} req;
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
} repl = { 0 };
|
||||||
|
uint8 *p=req.buff;
|
||||||
|
req.func = 0x40;
|
||||||
|
U16_TO_BE16(objtyp, req.typ);
|
||||||
|
req.namlen = min(47, strlen(objname));
|
||||||
|
memcpy(p, objname, req.namlen);
|
||||||
|
p += req.namlen;
|
||||||
|
*p = (uint8) min(128, strlen(password));
|
||||||
|
req.len = 4 + req.namlen + 1 + *p;
|
||||||
|
memcpy(p+1, password, (int) *p);
|
||||||
|
p += (1 + *p);
|
||||||
|
*p = (uint8) min(128, strlen(newpassword));
|
||||||
|
req.len += (1 + *p);
|
||||||
|
memcpy(p+1, newpassword, (int) *p);
|
||||||
|
neterrno = Net_Call(0xE300, &req, &repl);
|
||||||
|
if (neterrno) return(-1);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ncp_14_46(uint32 *obj_id)
|
||||||
|
/* get bindery access level & actual ID */
|
||||||
|
{
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
uint8 func;
|
||||||
|
} req;
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
uint8 access;
|
||||||
|
uint8 id[4];
|
||||||
|
} repl;
|
||||||
|
req.len = 1;
|
||||||
|
req.func = 0x46;
|
||||||
|
repl.len = 5;
|
||||||
|
neterrno = Net_Call(0xE300, &req, &repl);
|
||||||
|
if (neterrno) return(-1);
|
||||||
|
else {
|
||||||
|
if (obj_id) *obj_id = GET_BE32(repl.id);
|
||||||
|
return(repl.access);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ncp_17_4b(uint8 *cryptkey, uint8 *objname, uint16 objtyp,
|
||||||
|
int passwx, uint8 *newpassword)
|
||||||
|
/* keyed change password */
|
||||||
|
{
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
uint8 func;
|
||||||
|
uint8 key[8];
|
||||||
|
uint8 typ[2];
|
||||||
|
uint8 namlen;
|
||||||
|
uint8 buff[48+1+16];
|
||||||
|
} req;
|
||||||
|
struct {
|
||||||
|
uint16 len;
|
||||||
|
} repl = { 0 };
|
||||||
|
uint8 *p = req.buff;
|
||||||
|
req.func = 0x4b;
|
||||||
|
memcpy(req.key, cryptkey, 8);
|
||||||
|
U16_TO_BE16(objtyp, req.typ);
|
||||||
|
req.namlen = (uint8) min(48, strlen(objname));
|
||||||
|
req.len = 12 + req.namlen + 1 + 16;
|
||||||
|
memcpy(p, objname, (int) req.namlen);
|
||||||
|
p += req.namlen;
|
||||||
|
*p++ = (uint8) passwx;
|
||||||
|
memcpy(p, newpassword, 16);
|
||||||
|
neterrno = Net_Call(0xE300, &req, &repl);
|
||||||
|
if (neterrno) return(-1);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|||||||
115
net.c
115
net.c
@@ -1,29 +1,10 @@
|
|||||||
/*
|
/* net.c */
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
* Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: NET multicall front-end and command dispatcher for the DOS utility collection.
|
|
||||||
* Depends on: net.h plus command modules such as login.c, map.c, flag.c, ndir.c, trustee.c, tools.c and netcall.c.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define VERS_DATE "21-May-96"
|
#define VERS_DATE "21-May-96"
|
||||||
|
/* simple client program to act with mars_nwe */
|
||||||
|
|
||||||
|
/****************************************************************
|
||||||
|
* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany *
|
||||||
|
****************************************************************/
|
||||||
|
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
|
||||||
@@ -32,27 +13,6 @@ char prgpath[65];
|
|||||||
|
|
||||||
typedef int (*NET_FUNC)(int argc, char *argv[], int mode);
|
typedef int (*NET_FUNC)(int argc, char *argv[], int mode);
|
||||||
|
|
||||||
/*
|
|
||||||
* net_functions
|
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* Maps NET subcommands and stand-alone multicall executable names to their
|
|
||||||
* implementation function. The same binary can be invoked either as NET
|
|
||||||
* with the command name in argv[1], or through a renamed/stub executable
|
|
||||||
* where argv[0] already contains the command name.
|
|
||||||
*
|
|
||||||
* Fields:
|
|
||||||
* name - uppercase command or alias name used for dispatch.
|
|
||||||
* description - short text shown by the built-in usage listing.
|
|
||||||
* func - command implementation entry point.
|
|
||||||
* mode - small command-specific selector passed to shared handlers.
|
|
||||||
*
|
|
||||||
* Notes:
|
|
||||||
* NCOPY is intentionally kept out of this table while the NCP74
|
|
||||||
* server-side copy/open-handle path is still under investigation. Keeping
|
|
||||||
* ncopy.c in the build makes it compile-tested, but removing the table entry
|
|
||||||
* prevents accidental execution through NET/Multicall dispatch.
|
|
||||||
*/
|
|
||||||
static struct s_net_functions {
|
static struct s_net_functions {
|
||||||
char *name;
|
char *name;
|
||||||
char *description;
|
char *description;
|
||||||
@@ -74,18 +34,8 @@ static struct s_net_functions {
|
|||||||
{"PATHDEL","removes search path" , func_path , 1},
|
{"PATHDEL","removes search path" , func_path , 1},
|
||||||
{"PATHINS","insert search path" , func_path , 2},
|
{"PATHINS","insert search path" , func_path , 2},
|
||||||
{"LOGOUT", "logout from server", func_logout , 0},
|
{"LOGOUT", "logout from server", func_logout , 0},
|
||||||
{"FLAG", "display or modify file attributes", func_flag , 0},
|
#if 0
|
||||||
{"FLAGDIR","display or modify directory attributes",func_flagdir, 0},
|
|
||||||
{"GRANT", "grant trustee rights", func_grant , 0},
|
|
||||||
{"REVOKE", "revoke trustee rights", func_revoke , 0},
|
|
||||||
{"REMOVE", "remove trustee", func_remove , 0},
|
|
||||||
{"NDIR", "list directory contents", func_ndir , 0},
|
|
||||||
{"RIGHTS", "display effective file/directory rights",func_rights, 0},
|
|
||||||
{"CREATOR","display or set creator/modifier/archive ids",func_creator,0},
|
|
||||||
{"SLIST", "list servers", func_slist , 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
|
#endif
|
||||||
{"PASSWD", "change password", func_passwd , 0},
|
{"PASSWD", "change password", func_passwd , 0},
|
||||||
#if 1
|
#if 1
|
||||||
@@ -96,18 +46,6 @@ static struct s_net_functions {
|
|||||||
|
|
||||||
#define MAX_FUNCS (sizeof(net_functions) / sizeof(struct s_net_functions))
|
#define MAX_FUNCS (sizeof(net_functions) / sizeof(struct s_net_functions))
|
||||||
|
|
||||||
/*
|
|
||||||
* get_entry_nr
|
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* Resolves a DOS program path or command token to an entry in the NET
|
|
||||||
* dispatch table. The basename is extracted, an optional extension is
|
|
||||||
* removed, and the result is uppercased before it is compared with the
|
|
||||||
* registered command names.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* The net_functions[] index on match, or -1 if the token is not registered.
|
|
||||||
*/
|
|
||||||
static int get_entry_nr(char *fstr)
|
static int get_entry_nr(char *fstr)
|
||||||
{
|
{
|
||||||
int entry = MAX_FUNCS;
|
int entry = MAX_FUNCS;
|
||||||
@@ -126,24 +64,6 @@ static int get_entry_nr(char *fstr)
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* call_func_entry
|
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* Attempts to dispatch argv[0] to a registered NET command. This supports
|
|
||||||
* both stand-alone multicall-style invocations and the second pass from
|
|
||||||
* main(), where argv is shifted so that NET subcommands are dispatched as if
|
|
||||||
* they were executable names.
|
|
||||||
*
|
|
||||||
* Notes:
|
|
||||||
* Most commands require IPX/requester initialization before they run. MAP is
|
|
||||||
* allowed to run without a successful ipx_init() so it can report existing
|
|
||||||
* mapping state and requester-related errors in the traditional utility
|
|
||||||
* style.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* The command result, or -0xff when no matching command was found.
|
|
||||||
*/
|
|
||||||
int call_func_entry(int argc, char *argv[])
|
int call_func_entry(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int funcmode;
|
int funcmode;
|
||||||
@@ -165,14 +85,6 @@ int call_func_entry(int argc, char *argv[])
|
|||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* get_path
|
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* Stores the directory part of argv[0] in the global prgpath buffer. Some
|
|
||||||
* command handlers use this to locate companion files or command scripts
|
|
||||||
* relative to the NET executable.
|
|
||||||
*/
|
|
||||||
static void get_path(char *path)
|
static void get_path(char *path)
|
||||||
{
|
{
|
||||||
char buf[100];
|
char buf[100];
|
||||||
@@ -181,19 +93,6 @@ static void get_path(char *path)
|
|||||||
get_path_fn(buf, prgpath, NULL);
|
get_path_fn(buf, prgpath, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* main
|
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* NET multicall entry point. First try to dispatch by argv[0], which handles
|
|
||||||
* renamed/stub executables such as FLAG.EXE or NDIR.EXE. If that fails, try
|
|
||||||
* again with argv shifted by one so "NET FLAG ..." and similar command
|
|
||||||
* forms work through the same dispatch table.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* The selected command's return code. If no command matches, print the
|
|
||||||
* built-in usage list and return the not-found result.
|
|
||||||
*/
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int result = -0xff;
|
int result = -0xff;
|
||||||
|
|||||||
146
net.h
146
net.h
@@ -1,27 +1,8 @@
|
|||||||
/*
|
/* net.h: 20-May-96 */
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
* Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/****************************************************************
|
||||||
* Purpose: Shared public header for the DOS utility collection: types, prototypes and common structures.
|
* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany *
|
||||||
* Depends on: ipx.h, ncp.h, all command modules, netcall.c, ncpcall.c, tools.c and ncpapi.c.
|
****************************************************************/
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -36,7 +17,6 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#ifdef __WATCOMC__
|
#ifdef __WATCOMC__
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
extern int tool_page_line(int *line_count, int *continuous);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef unsigned int UI;
|
typedef unsigned int UI;
|
||||||
@@ -53,9 +33,35 @@ typedef void (*FUNC_VOID)();
|
|||||||
typedef int (*FUNC_INT)();
|
typedef int (*FUNC_INT)();
|
||||||
|
|
||||||
|
|
||||||
#include "ipx.h"
|
typedef struct {
|
||||||
#include "ncp.h"
|
uint8 checksum[2];
|
||||||
|
uint16 packetlen;
|
||||||
|
uint8 tcontrol;
|
||||||
|
uint8 ptype;
|
||||||
|
uint8 dest_net[4];
|
||||||
|
uint8 dest_node[6];
|
||||||
|
uint16 dest_sock; /* HI LOW */
|
||||||
|
uint8 source_net[4];
|
||||||
|
uint8 source_node[6];
|
||||||
|
uint16 source_sock; /* HI LOW */
|
||||||
|
} IPX_HEADER;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8 *link_address;
|
||||||
|
FUNC_VOID esr_routine;
|
||||||
|
uint8 in_use_flag;
|
||||||
|
uint8 completition_code;
|
||||||
|
uint16 socket; /* HI LOW */
|
||||||
|
uint8 ipx_workspace[4]; /* interner Gebrauch */
|
||||||
|
uint8 drv_workspace[4]; /* interner Gebrauch */
|
||||||
|
uint8 immediate_address[6]; /* HI LOW Node Address */
|
||||||
|
uint16 fragment_count; /* Anzahl Fragment Buffers */
|
||||||
|
uint8 *fragment_1;
|
||||||
|
uint16 fragment_1_size;
|
||||||
|
/* K”nnen auch mehr sein */
|
||||||
|
} ECB;
|
||||||
|
|
||||||
|
#include "kern.h"
|
||||||
|
|
||||||
#define UI2NET(i) ( ( (i) << 8) | ( ((i)>>8) & 0xFF) )
|
#define UI2NET(i) ( ( (i) << 8) | ( ((i)>>8) & 0xFF) )
|
||||||
#define NET2UI(i) ( ( (i) << 8) | ( ((i)>>8) & 0xFF) )
|
#define NET2UI(i) ( ( (i) << 8) | ( ((i)>>8) & 0xFF) )
|
||||||
@@ -100,24 +106,6 @@ typedef int (*FUNC_INT)();
|
|||||||
#define NWCLIENT 4
|
#define NWCLIENT 4
|
||||||
#define NWBIND 5
|
#define NWBIND 5
|
||||||
|
|
||||||
#define NCP_BINDERY_FSERVER 0x0004
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint32 object_id;
|
|
||||||
uint16 object_type;
|
|
||||||
uint8 object_name[49];
|
|
||||||
uint8 object_flags;
|
|
||||||
uint8 object_security;
|
|
||||||
uint8 object_has_prop;
|
|
||||||
} BINDERY_OBJECT;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8 value[128];
|
|
||||||
uint8 more_flag;
|
|
||||||
uint8 property_flag;
|
|
||||||
} NW_PROPERTY;
|
|
||||||
|
|
||||||
|
|
||||||
/* net.c */
|
/* net.c */
|
||||||
extern char *funcname;
|
extern char *funcname;
|
||||||
extern char prgpath[];
|
extern char prgpath[];
|
||||||
@@ -139,38 +127,6 @@ extern uint8 *upstr(uint8 *s);
|
|||||||
extern void korrpath(char *s);
|
extern void korrpath(char *s);
|
||||||
extern void get_path_fn(char *s, char *p, char *fn);
|
extern void get_path_fn(char *s, char *p, char *fn);
|
||||||
|
|
||||||
/* Shared DOS utility helpers. Keep command frontends small so the
|
|
||||||
* historical multicall net.exe can later be split into smaller groups. */
|
|
||||||
extern void tool_put_word_lh(uint8 *p, uint16 v);
|
|
||||||
extern void tool_put_dword_lh(uint8 *p, uint32 v);
|
|
||||||
extern uint16 tool_get_word_lh(uint8 *p);
|
|
||||||
extern uint32 tool_get_dword_lh(uint8 *p);
|
|
||||||
extern void tool_put_word_hl(uint8 *p, uint16 v);
|
|
||||||
extern void tool_put_dword_hl(uint8 *p, uint32 v);
|
|
||||||
extern uint16 tool_get_word_hl(uint8 *p);
|
|
||||||
extern uint32 tool_get_dword_hl(uint8 *p);
|
|
||||||
extern int tool_copy_ncp22_name(uint8 *dst, char *src, uint8 *len_out);
|
|
||||||
extern int tool_strsame(char *a, char *b);
|
|
||||||
extern int tool_is_help_arg(char *s);
|
|
||||||
extern int tool_is_option(char *s);
|
|
||||||
extern int tool_is_files_option(char *s);
|
|
||||||
extern int tool_is_subdirs_option(char *s);
|
|
||||||
extern int tool_get_current_drive(void);
|
|
||||||
extern int tool_current_dhandle(uint8 *connid, uint8 *dhandle);
|
|
||||||
extern int tool_current_dhandle_only(uint8 *dhandle);
|
|
||||||
extern int tool_current_prefix(char *out, int max);
|
|
||||||
extern int tool_is_current_path(char *path);
|
|
||||||
extern int tool_path_is_dir(char *path);
|
|
||||||
extern void tool_upcopy(char *dst, char *src, int max);
|
|
||||||
extern void tool_basename(char *dst, char *src, int max);
|
|
||||||
extern void tool_header_path(char *out, char *path, int max);
|
|
||||||
extern int tool_is_dot_dir(char *name);
|
|
||||||
extern void tool_join_path(char *out, char *base, char *name, int max);
|
|
||||||
extern int tool_has_wildcards(char *path);
|
|
||||||
extern void tool_parent_path(char *dst, char *src, int max);
|
|
||||||
extern void tool_parent_pattern(char *dir, char *pattern, char *path,
|
|
||||||
int maxdir, int maxpat);
|
|
||||||
|
|
||||||
#define reb(s) deb((s)),leb((s))
|
#define reb(s) deb((s)),leb((s))
|
||||||
|
|
||||||
extern void deb(uint8 *s);
|
extern void deb(uint8 *s);
|
||||||
@@ -230,25 +186,25 @@ extern int get_volume_name(uint8 nr, char *name);
|
|||||||
extern int get_search_drive_vektor(SEARCH_VECTOR_ENTRY *vec);
|
extern int get_search_drive_vektor(SEARCH_VECTOR_ENTRY *vec);
|
||||||
extern int set_search_drive_vektor(SEARCH_VECTOR_ENTRY *vec);
|
extern int set_search_drive_vektor(SEARCH_VECTOR_ENTRY *vec);
|
||||||
|
|
||||||
/********* ncp.h ***********/
|
/********* ncpcall.h ***********/
|
||||||
extern int ncp16_02_get_directory_entry(int dirhandle,
|
extern int ncp_16_02(int dirhandle,
|
||||||
uint8 *path,
|
uint8 *path,
|
||||||
int *sub_dir,
|
int *sub_dir,
|
||||||
uint8 *resultpath,
|
uint8 *resultpath,
|
||||||
uint32 *creattime,
|
uint32 *creattime,
|
||||||
uint32 *owner_id);
|
uint32 *owner_id);
|
||||||
|
|
||||||
extern int ncp14_46_get_bindery_access_level(uint32 *obj_id);
|
extern int ncp_14_46(uint32 *obj_id);
|
||||||
extern int ncp17_02_set_debug_level(int module, int debuglevel);
|
extern int ncp_17_02(int module, int debuglevel);
|
||||||
extern int ncp17_14_login_object_unencrypted(uint8 *objname, uint16 objtyp, uint8 *password);
|
extern int ncp_17_14(uint8 *objname, uint16 objtyp, uint8 *password);
|
||||||
extern int ncp17_17_get_encryption_key(uint8 *key);
|
extern int ncp_17_17(uint8 *key);
|
||||||
extern int ncp17_18_keyed_object_login(uint8 *cryptkey, uint8 *objname, uint16 objtyp);
|
extern int ncp_17_18(uint8 *cryptkey, uint8 *objname, uint16 objtyp);
|
||||||
extern uint32 ncp17_35_get_bindery_object_id(uint8 *objname, uint16 objtyp);
|
extern uint32 ncp_17_35(uint8 *objname, uint16 objtyp);
|
||||||
extern int ncp17_36_get_bindery_object_name(uint32 obj_id, uint8 *objname, uint16 *objtyp);
|
extern int ncp_17_36(uint32 obj_id, uint8 *objname, uint16 *objtyp);
|
||||||
extern int ncp17_40_change_password_unencrypted(uint8 *objname, uint16 objtyp, uint8 *password,
|
extern int ncp_17_40(uint8 *objname, uint16 objtyp, uint8 *password,
|
||||||
uint8 *newpassword);
|
uint8 *newpassword);
|
||||||
|
|
||||||
extern int ncp17_4b_keyed_change_password(uint8 *cryptkey, uint8 *objname, uint16 objtyp,
|
extern int ncp_17_4b(uint8 *cryptkey, uint8 *objname, uint16 objtyp,
|
||||||
int passwx, uint8 *newpassword);
|
int passwx, uint8 *newpassword);
|
||||||
|
|
||||||
/* map.c */
|
/* map.c */
|
||||||
@@ -268,8 +224,6 @@ extern int read_command_file(char *fstr);
|
|||||||
|
|
||||||
/* slist.c */
|
/* slist.c */
|
||||||
extern int func_slist (int argc, char *argv[], int mode);
|
extern int func_slist (int argc, char *argv[], int mode);
|
||||||
extern int func_whoami(int argc, char *argv[], int mode);
|
|
||||||
extern int func_ndir (int argc, char *argv[], int mode);
|
|
||||||
|
|
||||||
/* nwdebug.c */
|
/* nwdebug.c */
|
||||||
extern int func_debug (int argc, char *argv[], int mode);
|
extern int func_debug (int argc, char *argv[], int mode);
|
||||||
@@ -280,19 +234,5 @@ extern int func_tests (int argc, char *argv[], int mode);
|
|||||||
/* capture.c */
|
/* capture.c */
|
||||||
extern int func_capture(int argc, char *argv[], int mode);
|
extern int func_capture(int argc, char *argv[], int mode);
|
||||||
|
|
||||||
/* flag.c */
|
|
||||||
extern int func_flag (int argc, char *argv[], int mode);
|
|
||||||
extern int func_flagdir(int argc, char *argv[], int mode);
|
|
||||||
extern int func_grant (int argc, char *argv[], int mode);
|
|
||||||
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 ncp17_37_scan_bindery_object(uint32 last_id, uint16 objtyp, uint8 *pattern,
|
|
||||||
BINDERY_OBJECT *target);
|
|
||||||
extern int ncp17_3d_read_property_value(uint16 objtyp, uint8 *objname, int segment,
|
|
||||||
uint8 *propname, NW_PROPERTY *target);
|
|
||||||
|
|
||||||
|
|||||||
52
netcall.c
52
netcall.c
@@ -1,27 +1,8 @@
|
|||||||
/*
|
/* netcall.c: 05-Apr-96 */
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
* Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/****************************************************************
|
||||||
* Purpose: DOS/NetWare requester wrapper layer and environment helpers used by the utilities.
|
* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany *
|
||||||
* Depends on: net.h, ipx.asm/ncp.asm low-level IPX and Net_Call glue, ncpcall.c high-level NCP helpers, tools.c shared utility routines.
|
****************************************************************/
|
||||||
*/
|
|
||||||
|
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
|
||||||
@@ -73,24 +54,38 @@ int redir_device_drive(int devicetyp, uint8 *devname, uint8 *remotename)
|
|||||||
{
|
{
|
||||||
REGS regs;
|
REGS regs;
|
||||||
SREGS sregs;
|
SREGS sregs;
|
||||||
int result;
|
|
||||||
uint8 buff1[16];
|
uint8 buff1[16];
|
||||||
uint8 buff2[128];
|
uint8 buff2[128];
|
||||||
uint8 *ldevname = buff1;
|
uint8 *ldevname = buff1;
|
||||||
uint8 *lremotename = buff2;
|
uint8 *lremotename = buff2;
|
||||||
strncpy(ldevname, devname, 16);
|
|
||||||
|
memset(®s, 0, sizeof(regs));
|
||||||
|
memset(&sregs, 0, sizeof(sregs));
|
||||||
|
memset(buff1, 0, sizeof(buff1));
|
||||||
|
memset(buff2, 0, sizeof(buff2));
|
||||||
|
|
||||||
|
strmaxcpy(ldevname, devname, sizeof(buff1) - 1);
|
||||||
|
|
||||||
regs.x.ax = (devicetyp == -1) ? 0x5f04 : 0x5f03;
|
regs.x.ax = (devicetyp == -1) ? 0x5f04 : 0x5f03;
|
||||||
regs.h.bl = (uint8)devicetyp;
|
regs.h.bl = (uint8)devicetyp;
|
||||||
regs.x.cx = 0x574e; /* user sign 'NW' */
|
regs.x.cx = 0x574e; /* user sign 'NW' */
|
||||||
sregs.ds = FP_SEG(ldevname);
|
sregs.ds = FP_SEG(ldevname);
|
||||||
regs.x.si = FP_OFF(ldevname);
|
regs.x.si = FP_OFF(ldevname);
|
||||||
|
|
||||||
if (devicetyp > -1) {
|
if (devicetyp > -1) {
|
||||||
strncpy(lremotename, remotename, 128);
|
strmaxcpy(lremotename, remotename, sizeof(buff2) - 1);
|
||||||
sregs.es = FP_SEG(lremotename);
|
sregs.es = FP_SEG(lremotename);
|
||||||
regs.x.di = FP_OFF(lremotename);
|
regs.x.di = FP_OFF(lremotename);
|
||||||
}
|
}
|
||||||
result = intdosx(®s, ®s, &sregs);
|
|
||||||
return(regs.x.cflag ? -result : 0);
|
intdosx(®s, ®s, &sregs);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the actual DOS/redirector error code from AX when carry is set.
|
||||||
|
* The old code returned the intdosx() function result. With OpenWatcom
|
||||||
|
* this can hide which redirector error happened.
|
||||||
|
*/
|
||||||
|
return(regs.x.cflag ? -(int)regs.x.ax : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int list_redir(int index, int *devicetyp, uint8 *devname, uint8 *remotename)
|
int list_redir(int index, int *devicetyp, uint8 *devname, uint8 *remotename)
|
||||||
@@ -260,6 +255,7 @@ int alloc_dir_handle(int func,
|
|||||||
printf("alloc_dir_handle, path=%s, len=%d, disk=%c\n", path, pathlen, driveletter);
|
printf("alloc_dir_handle, path=%s, len=%d, disk=%c\n", path, pathlen, driveletter);
|
||||||
*/
|
*/
|
||||||
neterrno = Net_Call(0xE200, &req, &repl);
|
neterrno = Net_Call(0xE200, &req, &repl);
|
||||||
|
fprintf(stderr, "neterrno=%d\n", neterrno);
|
||||||
if (neterrno && neterrno != 0xff) return(-1);
|
if (neterrno && neterrno != 0xff) return(-1);
|
||||||
|
|
||||||
if (effrights) *effrights = repl.effrights;
|
if (effrights) *effrights = repl.effrights;
|
||||||
|
|||||||
BIN
netold.exe
BIN
netold.exe
Binary file not shown.
139
nwcrypt.c
139
nwcrypt.c
@@ -1,29 +1,3 @@
|
|||||||
/*
|
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
* Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: NetWare password obfuscation/encryption helper routines used by LOGIN/PASSWD.
|
|
||||||
* Depends on: nwcrypt.h public declarations and login.c caller.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*$*********************************************************
|
/*$*********************************************************
|
||||||
$*
|
$*
|
||||||
$* This code has been taken from DDJ 11/93, from an
|
$* This code has been taken from DDJ 11/93, from an
|
||||||
@@ -144,7 +118,6 @@ static buf32 encryptkeys =
|
|||||||
0x6B,0x0F,0xD5,0x70,0xAE,0xFB,0xAD,0x11,
|
0x6B,0x0F,0xD5,0x70,0xAE,0xFB,0xAD,0x11,
|
||||||
0xF4,0x47,0xDC,0xA7,0xEC,0xCF,0x50,0xC0};
|
0xF4,0x47,0xDC,0xA7,0xEC,0xCF,0x50,0xC0};
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include "nwcrypt.h"
|
#include "nwcrypt.h"
|
||||||
static void
|
static void
|
||||||
shuffle1(buf32 temp, unsigned char *target)
|
shuffle1(buf32 temp, unsigned char *target)
|
||||||
@@ -237,116 +210,4 @@ nw_encrypt(unsigned char *fra,unsigned char *buf,unsigned char *til)
|
|||||||
til[s] = k[s] ^ k[15 - s];
|
til[s] = k[s] ^ k[15 - s];
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned char
|
|
||||||
newshuffle[256] =
|
|
||||||
{
|
|
||||||
0x0f, 0x08, 0x05, 0x07, 0x0c, 0x02, 0x0e, 0x09,
|
|
||||||
0x00, 0x01, 0x06, 0x0d, 0x03, 0x04, 0x0b, 0x0a,
|
|
||||||
0x02, 0x0c, 0x0e, 0x06, 0x0f, 0x00, 0x01, 0x08,
|
|
||||||
0x0d, 0x03, 0x0a, 0x04, 0x09, 0x0b, 0x05, 0x07,
|
|
||||||
|
|
||||||
0x05, 0x02, 0x09, 0x0f, 0x0c, 0x04, 0x0d, 0x00,
|
|
||||||
0x0e, 0x0a, 0x06, 0x08, 0x0b, 0x01, 0x03, 0x07,
|
|
||||||
0x0f, 0x0d, 0x02, 0x06, 0x07, 0x08, 0x05, 0x09,
|
|
||||||
0x00, 0x04, 0x0c, 0x03, 0x01, 0x0a, 0x0b, 0x0e,
|
|
||||||
|
|
||||||
0x05, 0x0e, 0x02, 0x0b, 0x0d, 0x0a, 0x07, 0x00,
|
|
||||||
0x08, 0x06, 0x04, 0x01, 0x0f, 0x0c, 0x03, 0x09,
|
|
||||||
0x08, 0x02, 0x0f, 0x0a, 0x05, 0x09, 0x06, 0x0c,
|
|
||||||
0x00, 0x0b, 0x01, 0x0d, 0x07, 0x03, 0x04, 0x0e,
|
|
||||||
|
|
||||||
0x0e, 0x08, 0x00, 0x09, 0x04, 0x0b, 0x02, 0x07,
|
|
||||||
0x0c, 0x03, 0x0a, 0x05, 0x0d, 0x01, 0x06, 0x0f,
|
|
||||||
0x01, 0x04, 0x08, 0x0a, 0x0d, 0x0b, 0x07, 0x0e,
|
|
||||||
0x05, 0x0f, 0x03, 0x09, 0x00, 0x02, 0x06, 0x0c,
|
|
||||||
|
|
||||||
0x05, 0x03, 0x0c, 0x08, 0x0b, 0x02, 0x0e, 0x0a,
|
|
||||||
0x04, 0x01, 0x0d, 0x00, 0x06, 0x07, 0x0f, 0x09,
|
|
||||||
0x06, 0x00, 0x0b, 0x0e, 0x0d, 0x04, 0x0c, 0x0f,
|
|
||||||
0x07, 0x02, 0x08, 0x0a, 0x01, 0x05, 0x03, 0x09,
|
|
||||||
|
|
||||||
0x0b, 0x05, 0x0a, 0x0e, 0x0f, 0x01, 0x0c, 0x00,
|
|
||||||
0x06, 0x04, 0x02, 0x09, 0x03, 0x0d, 0x07, 0x08,
|
|
||||||
0x07, 0x02, 0x0a, 0x00, 0x0e, 0x08, 0x0f, 0x04,
|
|
||||||
0x0c, 0x0b, 0x09, 0x01, 0x05, 0x0d, 0x03, 0x06,
|
|
||||||
|
|
||||||
0x07, 0x04, 0x0f, 0x09, 0x05, 0x01, 0x0c, 0x0b,
|
|
||||||
0x00, 0x03, 0x08, 0x0e, 0x02, 0x0a, 0x06, 0x0d,
|
|
||||||
0x09, 0x04, 0x08, 0x00, 0x0a, 0x03, 0x01, 0x0c,
|
|
||||||
0x05, 0x0f, 0x07, 0x02, 0x0b, 0x0e, 0x06, 0x0d,
|
|
||||||
|
|
||||||
0x09, 0x05, 0x04, 0x07, 0x0e, 0x08, 0x03, 0x01,
|
|
||||||
0x0d, 0x0b, 0x0c, 0x02, 0x00, 0x0f, 0x06, 0x0a,
|
|
||||||
0x09, 0x0a, 0x0b, 0x0d, 0x05, 0x03, 0x0f, 0x00,
|
|
||||||
0x01, 0x0c, 0x08, 0x07, 0x06, 0x04, 0x0e, 0x02,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const unsigned char final_shuffle[16] = {
|
|
||||||
0x03, 0x0e, 0x0f, 0x02, 0x0d, 0x0c, 0x04, 0x05,
|
|
||||||
0x09, 0x06, 0x00, 0x01, 0x0b, 0x07, 0x0a, 0x08,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* verschluesseln des neuen Passworts fuer keyed change password
|
|
||||||
* Verwendung:
|
|
||||||
* - Shuffle (aus nwcrypt.c) altes passwort nach old (16 bytes)
|
|
||||||
* - shuffle neues passwort nach new (16 bytes)
|
|
||||||
* - nwpassencrypt (diese Funktion) zweimal aufrufen fuer je 8 bytes:
|
|
||||||
* nwpassencrypt(old+0, new+0, out+0)
|
|
||||||
* nwpassencrypt(old+8, new+8, out+8)
|
|
||||||
* - NCP-Buffer aufbauen:
|
|
||||||
* 2 byte Laenge im Hi-Lo-Format
|
|
||||||
* 1 byte Funktion (0x4b)
|
|
||||||
* 8 byte (nwcrypt Ergebnis analog login/verify password)
|
|
||||||
* 2 byte Objecttype
|
|
||||||
* 1 byte Objectname-Laenge
|
|
||||||
* n byte Objectname
|
|
||||||
* 1 byte (Laenge des eingegebenen neuen Passworts ^ old[0] ^ old[1])&0x7f|0x40
|
|
||||||
* 16 byte (Ergebnis dieser Funktion doppelt aufgerufen, s.o.)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Encrypt the new password for keyed change password
|
|
||||||
* For info on how to use this function, look at ncp_change_login_passwd
|
|
||||||
* in ncplib.c.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void
|
|
||||||
newpassencrypt(unsigned char *old, unsigned char *npwd)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 16; i++) {
|
|
||||||
int di, ax;
|
|
||||||
unsigned char *p, *bx;
|
|
||||||
unsigned char cl, dl, ch;
|
|
||||||
unsigned char copy[8];
|
|
||||||
|
|
||||||
memcpy(copy, npwd, 8);
|
|
||||||
for (di = 0, ax = 0, p = old; di < 8; di++, ax += 0x20, p++)
|
|
||||||
{
|
|
||||||
cl = newshuffle[(((copy[di] ^ *p) >> 4) & 0x0f) + ax + 0x10] << 4;
|
|
||||||
dl = newshuffle[((copy[di] ^ *p) & 0xf) + ax];
|
|
||||||
copy[di] = cl | dl;
|
|
||||||
}
|
|
||||||
|
|
||||||
ch = old[7];
|
|
||||||
for (bx = old + 7; bx > old; bx--)
|
|
||||||
{
|
|
||||||
*bx = ((bx[-1] >> 4) & 0x0f) | ((*bx) << 4);
|
|
||||||
}
|
|
||||||
*old = ((ch >> 4) & 0x0f) | (*old) << 4;
|
|
||||||
|
|
||||||
memset(npwd, 0, 8);
|
|
||||||
|
|
||||||
for (di = 0; di < 16; di++)
|
|
||||||
{
|
|
||||||
if (final_shuffle[di] & 1)
|
|
||||||
ch = ((copy[final_shuffle[di] / 2] >> 4) & 0x0f);
|
|
||||||
else
|
|
||||||
ch = copy[final_shuffle[di] / 2] & 0x0f;
|
|
||||||
npwd[di / 2] |= ((di & 1) ? ch << 4 : ch);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
28
nwcrypt.h
28
nwcrypt.h
@@ -1,33 +1,7 @@
|
|||||||
/*
|
/* nwcrypt.h */
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
* Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: Public declarations for NetWare password encryption helper routines.
|
|
||||||
* Depends on: nwcrypt.c implementation and login.c caller.
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern void shuffle(unsigned char *lon,
|
extern void shuffle(unsigned char *lon,
|
||||||
const unsigned char *buf, int buflen,
|
const unsigned char *buf, int buflen,
|
||||||
unsigned char *target);
|
unsigned char *target);
|
||||||
|
|
||||||
extern void nw_encrypt(unsigned char *fra,
|
extern void nw_encrypt(unsigned char *fra,
|
||||||
unsigned char *buf,unsigned char *til);
|
unsigned char *buf,unsigned char *til);
|
||||||
|
|
||||||
extern void newpassencrypt(unsigned char *old, unsigned char *npwd);
|
|
||||||
|
|||||||
29
nwdebug.c
29
nwdebug.c
@@ -1,27 +1,8 @@
|
|||||||
/*
|
/* nwdebug.c 21-May-96 */
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
* Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/****************************************************************
|
||||||
* Purpose: NWDEBUG command implementation for changing/querying MARS-NWE debug settings.
|
* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany *
|
||||||
* Depends on: net.h, netcall.c requester helpers, ncpcall.c NCP debug helper, tools.c shared utility routines.
|
****************************************************************/
|
||||||
*/
|
|
||||||
|
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
|
||||||
@@ -47,7 +28,7 @@ int func_debug(int argc, char *argv[], int mode)
|
|||||||
else return(usage());
|
else return(usage());
|
||||||
level = atoi(argv[2]);
|
level = atoi(argv[2]);
|
||||||
if (level < 0 || level > 99) return(usage());
|
if (level < 0 || level > 99) return(usage());
|
||||||
result = ncp17_02_set_debug_level(module, level);
|
result = ncp_17_02(module, level);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
fprintf(stderr, "set debug failed\n");
|
fprintf(stderr, "set debug failed\n");
|
||||||
fprintf(stderr, "perhaps you did not enable FUNC_17_02_IS_DEBUG\n");
|
fprintf(stderr, "perhaps you did not enable FUNC_17_02_IS_DEBUG\n");
|
||||||
|
|||||||
304
remove.c
304
remove.c
@@ -1,304 +0,0 @@
|
|||||||
/*
|
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: REMOVE utility for removing trustee rights from NetWare directories and files.
|
|
||||||
* Depends on: net.h, ncpapi.h, trustee.h/trustee.c trustee helpers, netcall.c requester helpers, tools.c shared utility routines.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "net.h"
|
|
||||||
#include "ncpapi.h"
|
|
||||||
#include "trustee.h"
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#ifndef _A_NORMAL
|
|
||||||
#define _A_NORMAL 0x00
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int remove_last_rc = 0;
|
|
||||||
|
|
||||||
static void remove_usage(void)
|
|
||||||
{
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
fprintf(stdout, "Usage: REMOVE [USER | GROUP] name [FROM path] [option]\n");
|
|
||||||
fprintf(stdout, "Options: /Subdirs | /Files \n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void remove_usage_after_error(void)
|
|
||||||
{
|
|
||||||
fprintf(stdout, "\007\n");
|
|
||||||
fprintf(stdout, "Usage: REMOVE [USER | GROUP] name [FROM path] [option]\n");
|
|
||||||
fprintf(stdout, "Options: /Subdirs | /Files \n");
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static int remove_one(char *path, uint16 dhandle, uint32 object_id,
|
|
||||||
uint16 objtype, char *objname, int forced_is_file)
|
|
||||||
{
|
|
||||||
uint16 old_rights = 0;
|
|
||||||
int is_dir;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
/* Without /FILES, Novell REMOVE reports directory-oriented messages even
|
|
||||||
* if the specified path cannot be located. */
|
|
||||||
is_dir = forced_is_file ? 0 : 1;
|
|
||||||
|
|
||||||
rc = ncp87_05_find_trustee_rights(path, dhandle, object_id, &old_rights,
|
|
||||||
NULL, NULL, NULL);
|
|
||||||
remove_last_rc = rc;
|
|
||||||
if (rc) {
|
|
||||||
if (rc == 0xff)
|
|
||||||
fprintf(stdout, "No trustee for the specified %s.\n", is_dir ? "directory" : "file");
|
|
||||||
else
|
|
||||||
fprintf(stdout, "Error scanning trustee list.\n");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = ncp22_2b_delete_trustee_rights(path, dhandle, object_id);
|
|
||||||
if (rc)
|
|
||||||
rc = ncp87_0b_delete_trustee_rights(path, dhandle, object_id,
|
|
||||||
NULL, NULL, NULL);
|
|
||||||
remove_last_rc = rc;
|
|
||||||
if (rc) {
|
|
||||||
fprintf(stdout, "Error deleting trustee.\n");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
char header[300];
|
|
||||||
trustee_header_path(header, path, sizeof(header));
|
|
||||||
fprintf(stdout, "%s\n", header);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (objtype == TRUSTEE_BINDERY_GROUP)
|
|
||||||
fprintf(stdout, "Group \"%s\" no longer a trustee to the specified %s.\n\n",
|
|
||||||
objname, is_dir ? "directory" : "file");
|
|
||||||
else
|
|
||||||
fprintf(stdout, "User \"%s\" no longer a trustee to the specified %s.\n\n",
|
|
||||||
objname, is_dir ? "directory" : "file");
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int remove_subdirs_inner(char *path, uint16 dhandle, uint32 object_id,
|
|
||||||
uint16 objtype, char *objname, int *count,
|
|
||||||
int include_this)
|
|
||||||
{
|
|
||||||
struct find_t ff;
|
|
||||||
char pattern[260];
|
|
||||||
char child[260];
|
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
if (include_this) {
|
|
||||||
if (remove_one(path, dhandle, object_id, objtype, objname, 0) == 0)
|
|
||||||
(*count)++;
|
|
||||||
else
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
tool_join_path(pattern, path, "*.*", sizeof(pattern));
|
|
||||||
|
|
||||||
if (_dos_findfirst(pattern, _A_SUBDIR, &ff) == 0) {
|
|
||||||
do {
|
|
||||||
if ((ff.attrib & _A_SUBDIR) && !tool_is_dot_dir(ff.name)) {
|
|
||||||
tool_join_path(child, path, ff.name, sizeof(child));
|
|
||||||
if (remove_subdirs_inner(child, dhandle, object_id, objtype, objname,
|
|
||||||
count, 1))
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
} while (_dos_findnext(&ff) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int remove_subdirs(char *path, uint16 dhandle, uint32 object_id,
|
|
||||||
uint16 objtype, char *objname, int *count)
|
|
||||||
{
|
|
||||||
/* Novell REMOVE /SUBDIRS affects the subdirectories under the specified
|
|
||||||
* start directory, not the start directory itself. */
|
|
||||||
return(remove_subdirs_inner(path, dhandle, object_id, objtype, objname,
|
|
||||||
count, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int remove_files(char *path, uint16 dhandle, uint32 object_id,
|
|
||||||
uint16 objtype, char *objname, int *count)
|
|
||||||
{
|
|
||||||
struct find_t ff;
|
|
||||||
char dir[260];
|
|
||||||
char pat[80];
|
|
||||||
char spec[260];
|
|
||||||
char target[260];
|
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
if (tool_path_is_dir(path)) {
|
|
||||||
strmaxcpy(dir, path, sizeof(dir) - 1);
|
|
||||||
strmaxcpy(pat, "*.*", sizeof(pat) - 1);
|
|
||||||
} else if (tool_has_wildcards(path)) {
|
|
||||||
tool_parent_pattern(dir, pat, path, sizeof(dir), sizeof(pat));
|
|
||||||
} else {
|
|
||||||
if (remove_one(path, dhandle, object_id, objtype, objname, 1) == 0)
|
|
||||||
(*count)++;
|
|
||||||
else
|
|
||||||
rc = 1;
|
|
||||||
return(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
tool_join_path(spec, dir, pat, sizeof(spec));
|
|
||||||
if (_dos_findfirst(spec, _A_NORMAL | _A_HIDDEN | _A_SYSTEM | _A_ARCH, &ff) == 0) {
|
|
||||||
do {
|
|
||||||
if (!(ff.attrib & _A_SUBDIR)) {
|
|
||||||
tool_join_path(target, dir, ff.name, sizeof(target));
|
|
||||||
if (remove_one(target, dhandle, object_id, objtype, objname, 1) == 0)
|
|
||||||
(*count)++;
|
|
||||||
else
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
} while (_dos_findnext(&ff) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
int func_remove(int argc, char *argv[], int mode)
|
|
||||||
{
|
|
||||||
char *path = ".";
|
|
||||||
char *objname = NULL;
|
|
||||||
char objprint[48];
|
|
||||||
uint16 objtype = TRUSTEE_BINDERY_USER;
|
|
||||||
int objtype_given = 0;
|
|
||||||
uint8 connid = 0;
|
|
||||||
uint8 dhandle = 0;
|
|
||||||
uint32 object_id;
|
|
||||||
int use_subdirs = 0;
|
|
||||||
int use_files = 0;
|
|
||||||
int count = 0;
|
|
||||||
int i = 1;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
(void)mode;
|
|
||||||
|
|
||||||
if (argc < 2 || tool_is_help_arg(argv[1])) {
|
|
||||||
if (argc < 2) {
|
|
||||||
remove_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
remove_usage();
|
|
||||||
return(argc < 2 ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i < argc && tool_strsame(argv[i], "USER")) {
|
|
||||||
/* Novell treats "REMOVE USER FROM path" as an object lookup for
|
|
||||||
* USER, not as a grammar error. */
|
|
||||||
if ((i + 1) < argc && tool_strsame(argv[i + 1], "FROM")) {
|
|
||||||
objtype_given = 0;
|
|
||||||
} else {
|
|
||||||
objtype = TRUSTEE_BINDERY_USER;
|
|
||||||
objtype_given = 1;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
} else if (i < argc && tool_strsame(argv[i], "GROUP")) {
|
|
||||||
if ((i + 1) < argc && tool_strsame(argv[i + 1], "FROM")) {
|
|
||||||
objtype_given = 0;
|
|
||||||
} else {
|
|
||||||
objtype = TRUSTEE_BINDERY_GROUP;
|
|
||||||
objtype_given = 1;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= argc) {
|
|
||||||
remove_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
objname = argv[i++];
|
|
||||||
|
|
||||||
if (i < argc && tool_strsame(argv[i], "FROM")) {
|
|
||||||
i++;
|
|
||||||
if (i >= argc) {
|
|
||||||
remove_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
path = argv[i++];
|
|
||||||
}
|
|
||||||
|
|
||||||
while (i < argc) {
|
|
||||||
if (!tool_is_option(argv[i])) {
|
|
||||||
remove_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_is_files_option(argv[i])) {
|
|
||||||
use_files = 1;
|
|
||||||
i++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_is_subdirs_option(argv[i])) {
|
|
||||||
use_subdirs = 1;
|
|
||||||
i++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_usage_after_error();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (use_files && use_subdirs) {
|
|
||||||
fprintf(stdout, "Remove cannot do both directories and files in a single pass.\n");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_current_dhandle(&connid, &dhandle)) {
|
|
||||||
fprintf(stdout, "Error: Drive not mapped to network.\n");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
object_id = trustee_lookup_object(objname, &objtype, objtype_given);
|
|
||||||
if (!object_id) {
|
|
||||||
if (objtype_given && objtype == TRUSTEE_BINDERY_GROUP)
|
|
||||||
fprintf(stdout, "\007Group \"%s\" not found.\n", objname);
|
|
||||||
else if (objtype_given)
|
|
||||||
fprintf(stdout, "\007User \"%s\" not found.\n", objname);
|
|
||||||
else
|
|
||||||
fprintf(stdout, "\007User or group \"%s\" not found.\n", objname);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
tool_upcopy(objprint, objname, sizeof(objprint));
|
|
||||||
|
|
||||||
if (use_subdirs)
|
|
||||||
rc = remove_subdirs(path, (uint16)dhandle, object_id, objtype, objprint, &count);
|
|
||||||
else if (use_files)
|
|
||||||
rc = remove_files(path, (uint16)dhandle, object_id, objtype, objprint, &count);
|
|
||||||
else {
|
|
||||||
rc = remove_one(path, (uint16)dhandle, object_id, objtype, objprint, 0);
|
|
||||||
if (!rc)
|
|
||||||
count = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (use_subdirs || (!use_files && !rc))
|
|
||||||
fprintf(stdout, "Trustee \"%s\" removed from %d directories.\n\n", objprint, count);
|
|
||||||
else if (use_files)
|
|
||||||
fprintf(stdout, "Trustee \"%s\" removed from %d files.\n\n", objprint, count);
|
|
||||||
|
|
||||||
return(rc ? (remove_last_rc ? remove_last_rc : 1) : 0);
|
|
||||||
}
|
|
||||||
361
revoke.c
361
revoke.c
@@ -1,361 +0,0 @@
|
|||||||
/*
|
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: REVOKE utility for deleting trustee assignments from NetWare directories and files.
|
|
||||||
* Depends on: net.h, ncpapi.h, trustee.h/trustee.c trustee helpers, netcall.c requester helpers, tools.c shared utility routines.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "net.h"
|
|
||||||
#include "ncpapi.h"
|
|
||||||
#include "trustee.h"
|
|
||||||
|
|
||||||
#ifndef _A_NORMAL
|
|
||||||
#define _A_NORMAL 0x00
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int revoke_last_rc = 0;
|
|
||||||
|
|
||||||
static void revoke_usage_short(int leading_blank, int bell_first)
|
|
||||||
{
|
|
||||||
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_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");
|
|
||||||
fprintf(stdout, " \n");
|
|
||||||
fprintf(stdout, "286 Rights:\t\t386 Rights:\n");
|
|
||||||
fprintf(stdout, "---------------\t\t--------------------\n");
|
|
||||||
fprintf(stdout, "ALL = All\t\tALL = All\n");
|
|
||||||
fprintf(stdout, "R = Read\t\tS = Supervisor\n");
|
|
||||||
fprintf(stdout, "W = Write\t\tR = Read\n");
|
|
||||||
fprintf(stdout, "O = Open\t\tW = Write\n");
|
|
||||||
fprintf(stdout, "C = Create\t\tC = Create\n");
|
|
||||||
fprintf(stdout, "D = Delete\t\tE = Erase\n");
|
|
||||||
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");
|
|
||||||
if (bell_before_tail)
|
|
||||||
fprintf(stdout, "\a");
|
|
||||||
fprintf(stdout, "* Use abbreviations listed above, separated by spaces.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static int revoke_one(char *path, uint16 dhandle, uint32 object_id,
|
|
||||||
uint16 revoke_mask, int forced_is_file)
|
|
||||||
{
|
|
||||||
uint16 old_rights = 0;
|
|
||||||
uint16 new_rights;
|
|
||||||
int is_dir;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
/* Without /FILES, Novell REVOKE reports directory-oriented messages even
|
|
||||||
* if the path cannot be located. */
|
|
||||||
is_dir = forced_is_file ? 0 : 1;
|
|
||||||
|
|
||||||
rc = ncp87_05_find_trustee_rights(path, dhandle, object_id, &old_rights,
|
|
||||||
NULL, NULL, NULL);
|
|
||||||
revoke_last_rc = rc;
|
|
||||||
if (rc) {
|
|
||||||
if (rc == 0xff)
|
|
||||||
fprintf(stdout, "\aNo trustee for the specified %s.\n", is_dir ? "directory" : "file");
|
|
||||||
else
|
|
||||||
fprintf(stdout, "\aError scanning trustee list.\n");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
new_rights = (uint16)(old_rights & ~revoke_mask);
|
|
||||||
|
|
||||||
if (new_rights == 0) {
|
|
||||||
/* Novell REVOKE removes the trustee through the old NCP22 trustee path.
|
|
||||||
* Keep the Client32/NCP87 delete call as a compatibility fallback. */
|
|
||||||
rc = ncp22_2b_delete_trustee_rights(path, dhandle, object_id);
|
|
||||||
if (rc)
|
|
||||||
rc = ncp87_0b_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 {
|
|
||||||
/* 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 = ncp22_27_set_trustee_rights(path, dhandle, object_id, new_rights);
|
|
||||||
if (rc)
|
|
||||||
rc = ncp87_0a_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");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
char header[300];
|
|
||||||
char bracket[10];
|
|
||||||
trustee_header_path(header, path, sizeof(header));
|
|
||||||
trustee_rights_bracket(new_rights, 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
tool_join_path(pattern, path, "*.*", sizeof(pattern));
|
|
||||||
|
|
||||||
if (_dos_findfirst(pattern, _A_SUBDIR, &ff) == 0) {
|
|
||||||
do {
|
|
||||||
if ((ff.attrib & _A_SUBDIR) && !tool_is_dot_dir(ff.name)) {
|
|
||||||
tool_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);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int revoke_subdirs(char *path, uint16 dhandle, uint32 object_id,
|
|
||||||
uint16 revoke_mask, int *count)
|
|
||||||
{
|
|
||||||
return(revoke_subdirs_inner(path, dhandle, object_id, revoke_mask,
|
|
||||||
count, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int revoke_files(char *path, uint16 dhandle, uint32 object_id,
|
|
||||||
uint16 revoke_mask, int *count)
|
|
||||||
{
|
|
||||||
struct find_t ff;
|
|
||||||
char dir[260];
|
|
||||||
char pat[80];
|
|
||||||
char spec[260];
|
|
||||||
char target[260];
|
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
if (tool_path_is_dir(path)) {
|
|
||||||
strmaxcpy(dir, path, sizeof(dir) - 1);
|
|
||||||
strmaxcpy(pat, "*.*", sizeof(pat) - 1);
|
|
||||||
} else if (tool_has_wildcards(path)) {
|
|
||||||
tool_parent_pattern(dir, pat, path, sizeof(dir), sizeof(pat));
|
|
||||||
} else {
|
|
||||||
if (revoke_one(path, dhandle, object_id, revoke_mask, 1) == 0)
|
|
||||||
(*count)++;
|
|
||||||
else
|
|
||||||
rc = 1;
|
|
||||||
return(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
tool_join_path(spec, dir, pat, sizeof(spec));
|
|
||||||
if (_dos_findfirst(spec, _A_NORMAL | _A_HIDDEN | _A_SYSTEM | _A_ARCH, &ff) == 0) {
|
|
||||||
do {
|
|
||||||
if (!(ff.attrib & _A_SUBDIR)) {
|
|
||||||
tool_join_path(target, dir, ff.name, sizeof(target));
|
|
||||||
if (revoke_one(target, dhandle, object_id, revoke_mask, 1) == 0)
|
|
||||||
(*count)++;
|
|
||||||
else
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
} while (_dos_findnext(&ff) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
int func_revoke(int argc, char *argv[], int mode)
|
|
||||||
{
|
|
||||||
uint16 rights = 0;
|
|
||||||
char *path = ".";
|
|
||||||
char *objname = NULL;
|
|
||||||
char objprint[48];
|
|
||||||
uint16 objtype = TRUSTEE_BINDERY_USER;
|
|
||||||
int objtype_given = 0;
|
|
||||||
uint8 connid = 0;
|
|
||||||
uint8 dhandle = 0;
|
|
||||||
uint32 object_id;
|
|
||||||
int use_subdirs = 0;
|
|
||||||
int use_files = 0;
|
|
||||||
int count = 0;
|
|
||||||
int i = 1;
|
|
||||||
int have_rights = 0;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
(void)mode;
|
|
||||||
|
|
||||||
if (argc < 2 || tool_is_help_arg(argv[1])) {
|
|
||||||
if (argc < 2)
|
|
||||||
revoke_usage_full(1, 1);
|
|
||||||
else
|
|
||||||
revoke_usage_short(1, 0);
|
|
||||||
return(argc < 2 ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (i < argc) {
|
|
||||||
if (tool_strsame(argv[i], "FOR") || tool_strsame(argv[i], "FROM"))
|
|
||||||
break;
|
|
||||||
if (tool_is_option(argv[i]))
|
|
||||||
break;
|
|
||||||
if (trustee_parse_right_word(argv[i], &rights)) {
|
|
||||||
fprintf(stdout, "Invalid right specified.\n\n");
|
|
||||||
revoke_usage_full(0, 1);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
have_rights = 1;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!have_rights || i >= argc) {
|
|
||||||
revoke_usage_short(0, 1);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_strsame(argv[i], "FOR")) {
|
|
||||||
i++;
|
|
||||||
if (i >= argc) {
|
|
||||||
revoke_usage_short(0, 1);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
path = argv[i++];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= argc || !tool_strsame(argv[i], "FROM")) {
|
|
||||||
revoke_usage_short(0, 1);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
|
|
||||||
if (i < argc && tool_strsame(argv[i], "USER")) {
|
|
||||||
objtype = TRUSTEE_BINDERY_USER;
|
|
||||||
objtype_given = 1;
|
|
||||||
i++;
|
|
||||||
} else if (i < argc && tool_strsame(argv[i], "GROUP")) {
|
|
||||||
objtype = TRUSTEE_BINDERY_GROUP;
|
|
||||||
objtype_given = 1;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i >= argc) {
|
|
||||||
revoke_usage_short(0, 1);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
objname = argv[i++];
|
|
||||||
|
|
||||||
while (i < argc) {
|
|
||||||
if (!tool_is_option(argv[i])) {
|
|
||||||
revoke_usage_short(0, 1);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_is_files_option(argv[i])) {
|
|
||||||
use_files = 1;
|
|
||||||
i++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tool_is_subdirs_option(argv[i])) {
|
|
||||||
use_subdirs = 1;
|
|
||||||
i++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
revoke_usage_short(0, 1);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Novell REVOKE does not emit a grammar-specific message for /FILES plus
|
|
||||||
* /SUBDIRECTORIES. It reports the same directory trustee failure text. */
|
|
||||||
|
|
||||||
if (tool_current_dhandle(&connid, &dhandle)) {
|
|
||||||
fprintf(stdout, "Error: Drive not mapped to Network.\n");
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
object_id = trustee_lookup_object(objname, &objtype, objtype_given);
|
|
||||||
if (!object_id) {
|
|
||||||
if (objtype_given && objtype == TRUSTEE_BINDERY_GROUP)
|
|
||||||
fprintf(stdout, "\aGroup \"%s\" not found.\n", objname);
|
|
||||||
else if (objtype_given)
|
|
||||||
fprintf(stdout, "\aUser \"%s\" not found.\n", objname);
|
|
||||||
else
|
|
||||||
fprintf(stdout, "\aUser or group \"%s\" not found.\n", objname);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
tool_upcopy(objprint, objname, sizeof(objprint));
|
|
||||||
|
|
||||||
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);
|
|
||||||
else {
|
|
||||||
rc = revoke_one(path, (uint16)dhandle, object_id, rights, 0);
|
|
||||||
if (!rc)
|
|
||||||
count = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
318
rights.c
318
rights.c
@@ -1,318 +0,0 @@
|
|||||||
/*
|
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: RIGHTS utility for displaying effective NetWare rights.
|
|
||||||
* Depends on: net.h, ncpapi.h, netcall.c requester helpers, ncpapi.c namespace/NCP helpers, tools.c shared utility routines.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "net.h"
|
|
||||||
#include "ncpapi.h"
|
|
||||||
#include <dos.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#ifndef S_IFDIR
|
|
||||||
#define S_IFDIR 0040000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define NW_RIGHT_S 0x01
|
|
||||||
#define NW_RIGHT_R 0x02
|
|
||||||
#define NW_RIGHT_W 0x04
|
|
||||||
#define NW_RIGHT_C 0x08
|
|
||||||
#define NW_RIGHT_E 0x10
|
|
||||||
#define NW_RIGHT_M 0x20
|
|
||||||
#define NW_RIGHT_F 0x40
|
|
||||||
#define NW_RIGHT_A 0x80
|
|
||||||
|
|
||||||
/* NCP effective-rights bits returned by NCP87 subfunction 29. */
|
|
||||||
#define NCP_RIGHT_READ 0x0001
|
|
||||||
#define NCP_RIGHT_WRITE 0x0002
|
|
||||||
#define NCP_RIGHT_OPEN 0x0004
|
|
||||||
#define NCP_RIGHT_CREATE 0x0008
|
|
||||||
#define NCP_RIGHT_DELETE 0x0010
|
|
||||||
#define NCP_RIGHT_OWNER 0x0020
|
|
||||||
#define NCP_RIGHT_SEARCH 0x0040
|
|
||||||
#define NCP_RIGHT_MODIFY 0x0080
|
|
||||||
#define NCP_RIGHT_SUPER 0x0100
|
|
||||||
|
|
||||||
static uint8 rights_map_ncp_mask(uint16 ncp_rights);
|
|
||||||
static void rights_ncp_path(char *dst, char *src, int max);
|
|
||||||
|
|
||||||
|
|
||||||
static void rights_usage(void)
|
|
||||||
{
|
|
||||||
fprintf(stdout, "\nUsage: RIGHTS [path]\n \n");
|
|
||||||
fprintf(stdout, " Rights = All | Supervisor | Read | Write | Create | Erase\n");
|
|
||||||
fprintf(stdout, " | Modify | File scan | Access Control\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void rights_ncp_path(char *dst, char *src, int max)
|
|
||||||
{
|
|
||||||
char up[260];
|
|
||||||
char *p;
|
|
||||||
|
|
||||||
if (tool_is_current_path(src)) {
|
|
||||||
dst[0] = '\0';
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
tool_upcopy(up, src, sizeof(up));
|
|
||||||
p = up;
|
|
||||||
if (p[0] && p[1] == ':') {
|
|
||||||
p += 2;
|
|
||||||
if (*p == '\\') p++;
|
|
||||||
}
|
|
||||||
while (*p == '\\') p++;
|
|
||||||
|
|
||||||
strmaxcpy(dst, p, max - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int rights_get_ncp_info(char *path, NCP_NDIR_INFO *info)
|
|
||||||
{
|
|
||||||
uint8 connid = 0;
|
|
||||||
uint8 dhandle = 0;
|
|
||||||
char npath[260];
|
|
||||||
|
|
||||||
if (!info)
|
|
||||||
return(1);
|
|
||||||
|
|
||||||
memset(info, 0, sizeof(*info));
|
|
||||||
|
|
||||||
if (tool_current_dhandle(&connid, &dhandle))
|
|
||||||
return(1);
|
|
||||||
|
|
||||||
rights_ncp_path(npath, path, sizeof(npath));
|
|
||||||
return(ncp87_06_obtain_ndir_info(npath, (uint16)dhandle,
|
|
||||||
info, NULL, NULL, NULL));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rights_path_exists(char *path, int *is_dir)
|
|
||||||
{
|
|
||||||
NCP_NDIR_INFO info;
|
|
||||||
|
|
||||||
if (rights_get_ncp_info(path, &info))
|
|
||||||
return(0);
|
|
||||||
|
|
||||||
if (is_dir)
|
|
||||||
*is_dir = (info.attributes & 0x10) ? 1 : 0;
|
|
||||||
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int rights_effective_mask(char *path, int is_dir, uint8 *mask)
|
|
||||||
{
|
|
||||||
uint8 connid = 0;
|
|
||||||
uint8 dhandle = 0;
|
|
||||||
uint8 eff = 0;
|
|
||||||
char usepath[260];
|
|
||||||
int newhandle;
|
|
||||||
uint16 ncp_rights = 0;
|
|
||||||
|
|
||||||
if (mask) *mask = 0;
|
|
||||||
|
|
||||||
if (tool_current_dhandle(&connid, &dhandle))
|
|
||||||
return(-1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Prefer the explicit Client32 NCP87 effective-rights request. This is
|
|
||||||
* the DOS Client32 equivalent of ncpfs ncp_get_eff_directory_rights().
|
|
||||||
* It works for both files and directories, so pass the requested path
|
|
||||||
* itself instead of mapping files to their parent directory.
|
|
||||||
*/
|
|
||||||
rights_ncp_path(usepath, path, sizeof(usepath));
|
|
||||||
if (!ncp87_1d_get_effective_rights(usepath,
|
|
||||||
(uint16)dhandle,
|
|
||||||
&ncp_rights,
|
|
||||||
NULL, NULL, NULL)) {
|
|
||||||
if (mask) *mask = rights_map_ncp_mask(ncp_rights);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Fallback for older requesters/paths: allocate a temporary directory
|
|
||||||
* handle and use the returned old-style effective-rights byte.
|
|
||||||
* This cannot directly target a file, so files are mapped to their parent.
|
|
||||||
*/
|
|
||||||
if (tool_is_current_path(path)) {
|
|
||||||
usepath[0] = '\0';
|
|
||||||
} else if (is_dir) {
|
|
||||||
rights_ncp_path(usepath, path, sizeof(usepath));
|
|
||||||
} else {
|
|
||||||
char npath[260];
|
|
||||||
rights_ncp_path(npath, path, sizeof(npath));
|
|
||||||
tool_parent_path(usepath, npath, sizeof(usepath));
|
|
||||||
}
|
|
||||||
|
|
||||||
newhandle = alloc_temp_dir_handle(dhandle, usepath, 0, &eff);
|
|
||||||
if (newhandle < 0) {
|
|
||||||
if (usepath[0]) {
|
|
||||||
int subdir = 1;
|
|
||||||
int r = ncp16_02_get_directory_entry(dhandle, (uint8 *)usepath, &subdir,
|
|
||||||
NULL, NULL, NULL);
|
|
||||||
if (r >= 0) {
|
|
||||||
eff = (uint8)r;
|
|
||||||
} else {
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
eff = 0xff;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
dealloc_dir_handle(newhandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mask) *mask = eff;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static uint8 rights_map_ncp_mask(uint16 ncp_rights)
|
|
||||||
{
|
|
||||||
uint8 mask = 0;
|
|
||||||
|
|
||||||
if (ncp_rights & NCP_RIGHT_SUPER) mask |= NW_RIGHT_S;
|
|
||||||
if (ncp_rights & NCP_RIGHT_READ) mask |= NW_RIGHT_R;
|
|
||||||
if (ncp_rights & NCP_RIGHT_WRITE) mask |= NW_RIGHT_W;
|
|
||||||
if (ncp_rights & NCP_RIGHT_CREATE) mask |= NW_RIGHT_C;
|
|
||||||
if (ncp_rights & NCP_RIGHT_DELETE) mask |= NW_RIGHT_E;
|
|
||||||
if (ncp_rights & NCP_RIGHT_MODIFY) mask |= NW_RIGHT_M;
|
|
||||||
if (ncp_rights & NCP_RIGHT_SEARCH) mask |= NW_RIGHT_F;
|
|
||||||
if (ncp_rights & NCP_RIGHT_OWNER) mask |= NW_RIGHT_A;
|
|
||||||
|
|
||||||
return(mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void rights_mask_string(uint8 mask, char *out)
|
|
||||||
{
|
|
||||||
out[0] = (mask & NW_RIGHT_S) ? 'S' : ' ';
|
|
||||||
out[1] = (mask & NW_RIGHT_R) ? 'R' : ' ';
|
|
||||||
out[2] = (mask & NW_RIGHT_W) ? 'W' : ' ';
|
|
||||||
out[3] = (mask & NW_RIGHT_C) ? 'C' : ' ';
|
|
||||||
out[4] = (mask & NW_RIGHT_E) ? 'E' : ' ';
|
|
||||||
out[5] = (mask & NW_RIGHT_M) ? 'M' : ' ';
|
|
||||||
out[6] = (mask & NW_RIGHT_F) ? 'F' : ' ';
|
|
||||||
out[7] = (mask & NW_RIGHT_A) ? 'A' : ' ';
|
|
||||||
out[8] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Novell RIGHTS layout:
|
|
||||||
* - lines with star: two leading blanks, star, blank, text
|
|
||||||
* - lines without star: four leading blanks, text
|
|
||||||
* Keep the right-column letter at a fixed-ish DOS-screen position.
|
|
||||||
*/
|
|
||||||
static void rights_print_line(int have, int star, char *text, char letter)
|
|
||||||
{
|
|
||||||
(void)have;
|
|
||||||
|
|
||||||
if (star)
|
|
||||||
fprintf(stdout, " * %-43s(%c)\n", text, letter);
|
|
||||||
else
|
|
||||||
fprintf(stdout, " %-43s(%c)\n", text, letter);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rights_display(char *path, int is_dir, uint8 mask)
|
|
||||||
{
|
|
||||||
char hdr[300];
|
|
||||||
char mstr[10];
|
|
||||||
|
|
||||||
tool_header_path(hdr, path, sizeof(hdr));
|
|
||||||
rights_mask_string(mask, mstr);
|
|
||||||
|
|
||||||
fprintf(stdout, "%s\n", hdr);
|
|
||||||
|
|
||||||
if (is_dir)
|
|
||||||
fprintf(stdout, "Your Effective Rights for this directory are [%s]\n", mstr);
|
|
||||||
else
|
|
||||||
fprintf(stdout, "Your Effective Rights for this file are [%s]\n", mstr);
|
|
||||||
|
|
||||||
if (is_dir) {
|
|
||||||
rights_print_line(mask & NW_RIGHT_S, 0, "You have Supervisor Rights to Directory.", 'S');
|
|
||||||
rights_print_line(mask & NW_RIGHT_R, 1, "May Read from File.", 'R');
|
|
||||||
rights_print_line(mask & NW_RIGHT_W, 1, "May Write to File.", 'W');
|
|
||||||
rights_print_line(mask & NW_RIGHT_C, 0, "May Create Subdirectories and Files.", 'C');
|
|
||||||
rights_print_line(mask & NW_RIGHT_E, 0, "May Erase Directory.", 'E');
|
|
||||||
rights_print_line(mask & NW_RIGHT_M, 0, "May Modify Directory.", 'M');
|
|
||||||
rights_print_line(mask & NW_RIGHT_F, 0, "May Scan for Files.", 'F');
|
|
||||||
rights_print_line(mask & NW_RIGHT_A, 0, "May Change Access Control.", 'A');
|
|
||||||
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
fprintf(stdout, "* Has no effect on directory.\n\n");
|
|
||||||
fprintf(stdout, " Entries in Directory May Inherit [%s] rights.\n", mstr);
|
|
||||||
if (mask == 0xff)
|
|
||||||
fprintf(stdout, " You have ALL RIGHTS to Directory Entry.\n");
|
|
||||||
} else {
|
|
||||||
rights_print_line(mask & NW_RIGHT_S, 0, "You have Supervisor Rights to File.", 'S');
|
|
||||||
rights_print_line(mask & NW_RIGHT_R, 0, "May Read from File.", 'R');
|
|
||||||
rights_print_line(mask & NW_RIGHT_W, 0, "May Write to File.", 'W');
|
|
||||||
rights_print_line(mask & NW_RIGHT_C, 1, "May Create Subdirectories and Files.", 'C');
|
|
||||||
rights_print_line(mask & NW_RIGHT_E, 0, "May Erase File.", 'E');
|
|
||||||
rights_print_line(mask & NW_RIGHT_M, 0, "May Modify File.", 'M');
|
|
||||||
rights_print_line(mask & NW_RIGHT_F, 0, "May Scan for File.", 'F');
|
|
||||||
rights_print_line(mask & NW_RIGHT_A, 0, "May Change Access Control.", 'A');
|
|
||||||
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
fprintf(stdout, "* Create is necessary to salvage a file that has been deleted.\n\n");
|
|
||||||
if (mask == 0xff)
|
|
||||||
fprintf(stdout, " You have ALL RIGHTS to Directory Entry.\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int func_rights(int argc, char *argv[], int mode)
|
|
||||||
{
|
|
||||||
char *path = ".";
|
|
||||||
uint8 mask = 0;
|
|
||||||
int is_dir;
|
|
||||||
|
|
||||||
(void)mode;
|
|
||||||
|
|
||||||
if (argc > 2) {
|
|
||||||
fprintf(stdout, "Too many parameters on command line.\n");
|
|
||||||
rights_usage();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc == 2) {
|
|
||||||
if (tool_is_help_arg(argv[1])) {
|
|
||||||
rights_usage();
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
path = argv[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!rights_path_exists(path, &is_dir)) {
|
|
||||||
fprintf(stdout, "Specified path not locatable.\n");
|
|
||||||
rights_usage();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rights_effective_mask(path, is_dir, &mask)) {
|
|
||||||
fprintf(stdout, "Specified path not locatable.\n");
|
|
||||||
rights_usage();
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
rights_display(path, is_dir, mask);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
118
slist.c
118
slist.c
@@ -1,125 +1,15 @@
|
|||||||
/*
|
/* map.c 12-Jan-96 */
|
||||||
* mars-nwe-dosutils - NetWare/DOS utility tools.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2026 Mario Fetka
|
|
||||||
* Copyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: SLIST utility for listing visible NetWare file servers.
|
|
||||||
* Depends on: net.h, netcall.c requester helpers, ncpcall.c bindery/server helpers, tools.c shared utility routines.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
/****************************************************************
|
||||||
|
* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany *
|
||||||
|
****************************************************************/
|
||||||
|
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
|
||||||
#define NCP_BINDERY_FSERVER 0x0004
|
|
||||||
|
|
||||||
static int usage(void)
|
|
||||||
{
|
|
||||||
fprintf(stdout, "Usage: SLIST [Server] [/Continue] \n");
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned long node_to_number(uint8 *addr)
|
|
||||||
{
|
|
||||||
unsigned long n = 0;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 4; i < 10; i++)
|
|
||||||
n = (n << 8) + addr[i];
|
|
||||||
|
|
||||||
return(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void print_net_node_status(uint8 *addr, int is_default)
|
|
||||||
{
|
|
||||||
fprintf(stdout, "[%08lX][%12lu]%s",
|
|
||||||
(unsigned long)GET_BE32(addr),
|
|
||||||
node_to_number(addr),
|
|
||||||
is_default ? "Default " : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
int func_slist(int argc, char *argv[], int mode)
|
int func_slist(int argc, char *argv[], int mode)
|
||||||
{
|
{
|
||||||
BINDERY_OBJECT obj;
|
|
||||||
uint32 last_id = MAX_U32;
|
|
||||||
uint8 pattern[50];
|
|
||||||
int explicit_server = 0;
|
|
||||||
int found = 0;
|
|
||||||
int result;
|
|
||||||
int i;
|
|
||||||
int continuous = 0;
|
|
||||||
int line_count = 0;
|
|
||||||
|
|
||||||
(void)mode;
|
|
||||||
|
|
||||||
strcpy(pattern, "*");
|
|
||||||
|
|
||||||
for (i = 1; i < argc; i++) {
|
|
||||||
if (tool_is_help_arg(argv[i])) return(usage());
|
|
||||||
|
|
||||||
if (argv[i][0] == '/' || argv[i][0] == '-') {
|
|
||||||
if (tool_strsame(argv[i], "/C") || tool_strsame(argv[i], "/CONTINUE") ||
|
|
||||||
tool_strsame(argv[i], "-C") || tool_strsame(argv[i], "-CONTINUE")) {
|
|
||||||
continuous = 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
return(usage());
|
|
||||||
}
|
|
||||||
|
|
||||||
strmaxcpy(pattern, argv[i], sizeof(pattern) - 1);
|
|
||||||
explicit_server = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
upstr(pattern);
|
|
||||||
|
|
||||||
while ((result = ncp17_37_scan_bindery_object(last_id, NCP_BINDERY_FSERVER,
|
|
||||||
pattern, &obj)) == 0) {
|
|
||||||
NW_PROPERTY prop;
|
|
||||||
|
|
||||||
found++;
|
|
||||||
last_id = obj.object_id;
|
|
||||||
|
|
||||||
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 (!ncp17_3d_read_property_value(NCP_BINDERY_FSERVER, obj.object_name,
|
|
||||||
1, "NET_ADDRESS", &prop)) {
|
|
||||||
print_net_node_status(prop.value, found == 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(stdout, "\n");
|
|
||||||
tool_page_line(&line_count, &continuous);
|
|
||||||
|
|
||||||
if (last_id == MAX_U32) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (explicit_server && !found) {
|
|
||||||
fprintf(stdout, "Server %s not found.\n", pattern);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(stdout, "\nTotal of %d file servers found\n", found);
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
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.
|
|
||||||
107
test/README.md
107
test/README.md
@@ -1,107 +0,0 @@
|
|||||||
# DOS utility regression tests
|
|
||||||
|
|
||||||
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`.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
## Output naming convention
|
|
||||||
|
|
||||||
The generated result trees use these names consistently:
|
|
||||||
|
|
||||||
```text
|
|
||||||
OUT Novell reference output from SYS:NPUBLIC or SYS:NLOGIN
|
|
||||||
PUBOUT current implementation output from SYS:PUBLIC or SYS:LOGIN
|
|
||||||
COMPARE.LOG
|
|
||||||
|
|
||||||
UNOV Novell readback while logged in as NOPASSUSER
|
|
||||||
UPUB public readback while logged in as NOPASSUSER
|
|
||||||
UCOMP.LOG
|
|
||||||
|
|
||||||
LOUT Novell output while logged out, usually from SYS:NLOGIN copy
|
|
||||||
LPUBOUT public output while logged out, usually from SYS:LOGIN copy
|
|
||||||
LCOMP.LOG
|
|
||||||
```
|
|
||||||
|
|
||||||
Not every test has every directory. For example, SLIST has `LOUT`/`LPUBOUT`,
|
|
||||||
while trustee tools usually have `UNOV`/`UPUB`.
|
|
||||||
|
|
||||||
## User switching and local helpers
|
|
||||||
|
|
||||||
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.
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
@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
|
|
||||||
@@ -1,194 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM CIXSTA.BAT
|
|
||||||
REM Automated CREATOR/xattr test for MARS NWE.
|
|
||||||
REM
|
|
||||||
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 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 \
|
|
||||||
|
|
||||||
REM --- Clean generated test/result directories (contents only). ---
|
|
||||||
IF EXIST CIXTEST\NUL DELTREE /Y CIXTEST\*.*
|
|
||||||
IF EXIST CIXCMP\NUL DELTREE /Y CIXCMP\*.*
|
|
||||||
|
|
||||||
IF NOT EXIST CIXTEST\NUL MD CIXTEST
|
|
||||||
IF NOT EXIST CIXTEST\SUP\NUL MD CIXTEST\SUP
|
|
||||||
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
|
|
||||||
IF EXIST F:\CIXCMP\CIXSTA.ZIP DEL F:\CIXCMP\CIXSTA.ZIP
|
|
||||||
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
|
|
||||||
IF EXIST F:\CIXTEST\SUP\S_ARCH.TXT DEL F:\CIXTEST\SUP\S_ARCH.TXT
|
|
||||||
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
|
|
||||||
ECHO SUP ARCHIVE FILE > F:\CIXTEST\SUP\S_ARCH.TXT
|
|
||||||
ECHO SUP ALL FILE > F:\CIXTEST\SUP\S_ALL.TXT
|
|
||||||
|
|
||||||
NPUBLIC\FLAG F:\CIXTEST\SUP\S_SUP.TXT N >> F:\CIXCMP\RUN.LOG
|
|
||||||
NPUBLIC\FLAG F:\CIXTEST\SUP\S_ARCH.TXT N >> F:\CIXCMP\RUN.LOG
|
|
||||||
NPUBLIC\FLAG F:\CIXTEST\SUP\S_ALL.TXT N >> F:\CIXCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === PRE READBACK === >> F:\CIXCMP\RUN.LOG
|
|
||||||
NPUBLIC\NDIR F:\CIXTEST\SUP /DATES > F:\CIXCMP\PRE\SUPDAT.OUT
|
|
||||||
NPUBLIC\NDIR F:\CIXTEST\SUP /RIGHTS > F:\CIXCMP\PRE\SUPRGT.OUT
|
|
||||||
PUBLIC\CREATOR F:\CIXTEST\SUP\S_SUP.TXT /SHOW > F:\CIXCMP\PRE\CSUP.OUT
|
|
||||||
PUBLIC\CREATOR F:\CIXTEST\SUP\S_ARCH.TXT /SHOW > F:\CIXCMP\PRE\CARCH.OUT
|
|
||||||
PUBLIC\CREATOR F:\CIXTEST\SUP\S_ALL.TXT /SHOW > F:\CIXCMP\PRE\CALL.OUT
|
|
||||||
|
|
||||||
ECHO === CREATOR TOOL SET INFO === >> F:\CIXCMP\RUN.LOG
|
|
||||||
|
|
||||||
REM Set fileinfo xattr fields.
|
|
||||||
PUBLIC\CREATOR F:\CIXTEST\SUP\S_SUP.TXT /CREATOR MARIO >> F:\CIXCMP\RUN.LOG
|
|
||||||
PUBLIC\CREATOR F:\CIXTEST\SUP\S_SUP.TXT /MODIFIER MARIO >> F:\CIXCMP\RUN.LOG
|
|
||||||
|
|
||||||
REM Set archive xattr fields.
|
|
||||||
PUBLIC\CREATOR F:\CIXTEST\SUP\S_ARCH.TXT /ARCHIVE MARIO >> F:\CIXCMP\RUN.LOG
|
|
||||||
|
|
||||||
REM Set all three groups with one command and explicit date/time.
|
|
||||||
PUBLIC\CREATOR F:\CIXTEST\SUP\S_ALL.TXT /ALL MARIO 2026-05-25 16:12:00 >> F:\CIXCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === POST READBACK === >> F:\CIXCMP\RUN.LOG
|
|
||||||
NPUBLIC\NDIR F:\CIXTEST\SUP /DATES > F:\CIXCMP\POST\SUPDAT.OUT
|
|
||||||
NPUBLIC\NDIR F:\CIXTEST\SUP /RIGHTS > F:\CIXCMP\POST\SUPRGT.OUT
|
|
||||||
PUBLIC\CREATOR F:\CIXTEST\SUP\S_SUP.TXT /SHOW > F:\CIXCMP\POST\CSUP.OUT
|
|
||||||
PUBLIC\CREATOR F:\CIXTEST\SUP\S_ARCH.TXT /SHOW > F:\CIXCMP\POST\CARCH.OUT
|
|
||||||
PUBLIC\CREATOR F:\CIXTEST\SUP\S_ALL.TXT /SHOW > F:\CIXCMP\POST\CALL.OUT
|
|
||||||
|
|
||||||
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
|
|
||||||
ECHO Expected: >> F:\CIXCMP\SUMMARY.TXT
|
|
||||||
ECHO - S_SUP.TXT has creator/modifier MARIO via user.mars_nwe.fileinfo. >> F:\CIXCMP\SUMMARY.TXT
|
|
||||||
ECHO - S_ARCH.TXT has archive date/time/archiver MARIO via user.mars_nwe.archive. >> F:\CIXCMP\SUMMARY.TXT
|
|
||||||
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 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 +0,0 @@
|
|||||||
@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,179 +0,0 @@
|
|||||||
# CREATOR / xattr automated test
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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`.
|
|
||||||
|
|
||||||
For the full test, including the `NOPASSUSER` readback, set the Supervisor
|
|
||||||
password first:
|
|
||||||
|
|
||||||
```text
|
|
||||||
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:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo ./cix_collect_xattr.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Finally package the DOS-side result tree:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\CIXZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
Result ZIP:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\CIXCMP\CIXSTA.ZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
Linux package with server log:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo ./mars_packtest_v3.sh cixsta 5 mario
|
|
||||||
```
|
|
||||||
|
|
||||||
## What CIXSTA does
|
|
||||||
|
|
||||||
```text
|
|
||||||
S_SUP.TXT:
|
|
||||||
PUBLIC\CREATOR ... /CREATOR MARIO
|
|
||||||
PUBLIC\CREATOR ... /MODIFIER MARIO
|
|
||||||
Expected xattr: user.mars_nwe.fileinfo
|
|
||||||
|
|
||||||
S_ARCH.TXT:
|
|
||||||
PUBLIC\CREATOR ... /ARCHIVE MARIO
|
|
||||||
Expected xattr: user.mars_nwe.archive
|
|
||||||
|
|
||||||
S_ALL.TXT:
|
|
||||||
PUBLIC\CREATOR ... /ALL MARIO 2026-05-25 16:12:00
|
|
||||||
Expected xattrs: user.mars_nwe.fileinfo and user.mars_nwe.archive
|
|
||||||
```
|
|
||||||
|
|
||||||
The scripts also grant `NOPASSUSER` read/file-scan rights and collect readback
|
|
||||||
output as that user:
|
|
||||||
|
|
||||||
```text
|
|
||||||
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
|
|
||||||
```
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# cix_collect_xattr.sh
|
|
||||||
#
|
|
||||||
# Linux-side collector for the CIXSTA CREATOR/xattr test.
|
|
||||||
#
|
|
||||||
# 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=${SYS:-/var/mars_nwe/SYS}
|
|
||||||
TREE=${TREE:-$SYS/CIXTEST}
|
|
||||||
OUT=${OUT:-$SYS/CIXCMP/LINUX}
|
|
||||||
|
|
||||||
mkdir -p "$OUT"
|
|
||||||
|
|
||||||
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 the attr package." | tee "$OUT/getfattr_missing.txt"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
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 < "$FILES"
|
|
||||||
} > "$STAT"
|
|
||||||
|
|
||||||
{
|
|
||||||
while IFS= read -r p; do
|
|
||||||
echo "### $p"
|
|
||||||
getfattr -m - --absolute-names "$p" 2>/dev/null || true
|
|
||||||
echo
|
|
||||||
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 < "$FILES"
|
|
||||||
} > "$GETFATTR"
|
|
||||||
|
|
||||||
grep -iE 'mars|nwe|netware|trust|owner|creator|modifier|archiv|fileinfo|dos|attr' \
|
|
||||||
"$GETFATTR" > "$XATTR_FOCUS" || true
|
|
||||||
|
|
||||||
chmod -R a+r "$OUT"
|
|
||||||
|
|
||||||
cat <<EOF2
|
|
||||||
Wrote:
|
|
||||||
$INFO
|
|
||||||
$FILES
|
|
||||||
$STAT
|
|
||||||
$XATTR_NAMES
|
|
||||||
$GETFATTR
|
|
||||||
$XATTR_FOCUS
|
|
||||||
EOF2
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
SRC="/home/mario/mars/mars-nwe-build/dosutils/net.exe"
|
|
||||||
SYS="/var/mars_nwe/SYS"
|
|
||||||
|
|
||||||
# Nur unsere aktuell getesteten Open-Source-Tools überschreiben:
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/login.exe"
|
|
||||||
install -m 0644 "$SRC" "$SYS/login/login.exe"
|
|
||||||
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/map.exe"
|
|
||||||
install -m 0644 "$SRC" "$SYS/login/map.exe"
|
|
||||||
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/slist.exe"
|
|
||||||
install -m 0644 "$SRC" "$SYS/login/slist.exe"
|
|
||||||
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/pathins.exe"
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/pathdel.exe"
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/path.exe"
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/flag.exe"
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/flagdir.exe"
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/rights.exe"
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/grant.exe"
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/revoke.exe"
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/remove.exe"
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/ndir.exe"
|
|
||||||
|
|
||||||
# Optional nur wenn du gerade diese Open-Source-Version testen willst:
|
|
||||||
# install -m 0644 "$SRC" "$SYS/public/passwd.exe"
|
|
||||||
# install -m 0644 "$SRC" "$SYS/public/capture.exe"
|
|
||||||
# install -m 0644 "$SRC" "$SYS/public/endcap.exe"
|
|
||||||
# install -m 0644 "$SRC" "$SYS/public/logout.exe"
|
|
||||||
|
|
||||||
install -m 0644 "$SRC" "$SYS/public/tests.exe"
|
|
||||||
|
|
||||||
|
|
||||||
echo "deployed selected Open Source DOS utils from: $SRC"
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM FILCMPN.BAT
|
|
||||||
REM Repeat comparison of FILER PRE/POST output files.
|
|
||||||
REM
|
|
||||||
REM Run after FILPREN.BAT, manual NPUBLIC\FILER, and FILPOSTN.BAT.
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === FILCMPN: Compare FILER PRE/POST outputs ===
|
|
||||||
ECHO.
|
|
||||||
ECHO Unterschiede sind OK, wenn sie bewusst in FILER erzeugt wurden.
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C01 FLAG A.TXT ===
|
|
||||||
FC F:\TFILE\PRE\FLAGA.OUT F:\TFILE\POST\FLAGA.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C02 FLAG B.TXT ===
|
|
||||||
FC F:\TFILE\PRE\FLAGB.OUT F:\TFILE\POST\FLAGB.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C03 FLAG KEEP.TXT ===
|
|
||||||
FC F:\TFILE\PRE\FLAGK.OUT F:\TFILE\POST\FLAGK.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C04 NDIR ===
|
|
||||||
FC F:\TFILE\PRE\NDIR.OUT F:\TFILE\POST\NDIR.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C05 DATES ===
|
|
||||||
FC F:\TFILE\PRE\DATES.OUT F:\TFILE\POST\DATES.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C06 NDIR RIGHTS ===
|
|
||||||
FC F:\TFILE\PRE\RIGHTS.OUT F:\TFILE\POST\RIGHTS.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C07 RIGHTS Directory ===
|
|
||||||
FC F:\TFILE\PRE\TRUST.OUT F:\TFILE\POST\TRUST.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C08 RIGHTS A.TXT ===
|
|
||||||
FC F:\TFILE\PRE\TRUSTA.OUT F:\TFILE\POST\TRUSTA.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === FILCMPN fertig ===
|
|
||||||
@@ -1,149 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM FILPOSTN.BAT
|
|
||||||
REM Novell-only FILER post-test readback and compare for MARS NWE.
|
|
||||||
REM
|
|
||||||
REM Run this after manual NPUBLIC\FILER test.
|
|
||||||
REM
|
|
||||||
REM Vergleicht:
|
|
||||||
REM F:\TFILE\PRE\*.OUT
|
|
||||||
REM F:\TFILE\POST\*.OUT
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === FILPOSTN: Novell FILER Post-Test Compare ===
|
|
||||||
ECHO.
|
|
||||||
ECHO Dieses Script erzeugt POST-Ausgaben und vergleicht sie mit PRE.
|
|
||||||
ECHO Unterschiede sind OK, wenn du in FILER bewusst etwas geaendert hast.
|
|
||||||
ECHO Unerwartete Unterschiede bitte gegen Serverlog pruefen.
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q01: POST-Ausgaben erzeugen ===
|
|
||||||
ECHO Schreibe POST\FLAGA.OUT
|
|
||||||
NPUBLIC\FLAG F:\TFILE\A.TXT > F:\TFILE\POST\FLAGA.OUT
|
|
||||||
ECHO Schreibe POST\FLAGB.OUT
|
|
||||||
NPUBLIC\FLAG F:\TFILE\B.TXT > F:\TFILE\POST\FLAGB.OUT
|
|
||||||
ECHO Schreibe POST\FLAGK.OUT
|
|
||||||
NPUBLIC\FLAG F:\TFILE\KEEP.TXT > F:\TFILE\POST\FLAGK.OUT
|
|
||||||
ECHO Schreibe POST\FLAGC.OUT
|
|
||||||
NPUBLIC\FLAG F:\TFILE\SUBDIR\C.TXT > F:\TFILE\POST\FLAGC.OUT
|
|
||||||
ECHO Schreibe POST\NDIR.OUT
|
|
||||||
NPUBLIC\NDIR F:\TFILE > F:\TFILE\POST\NDIR.OUT
|
|
||||||
ECHO Schreibe POST\DATES.OUT
|
|
||||||
NPUBLIC\NDIR F:\TFILE /DATES > F:\TFILE\POST\DATES.OUT
|
|
||||||
ECHO Schreibe POST\RIGHTS.OUT
|
|
||||||
NPUBLIC\NDIR F:\TFILE /RIGHTS > F:\TFILE\POST\RIGHTS.OUT
|
|
||||||
ECHO Schreibe POST\TRUST.OUT
|
|
||||||
NPUBLIC\RIGHTS F:\TFILE > F:\TFILE\POST\TRUST.OUT
|
|
||||||
ECHO Schreibe POST\TRUSTA.OUT
|
|
||||||
NPUBLIC\RIGHTS F:\TFILE\A.TXT > F:\TFILE\POST\TRUSTA.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q02: Vergleich FLAG A.TXT ===
|
|
||||||
FC F:\TFILE\PRE\FLAGA.OUT F:\TFILE\POST\FLAGA.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q03: Vergleich FLAG B.TXT ===
|
|
||||||
FC F:\TFILE\PRE\FLAGB.OUT F:\TFILE\POST\FLAGB.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q04: Vergleich FLAG KEEP.TXT ===
|
|
||||||
FC F:\TFILE\PRE\FLAGK.OUT F:\TFILE\POST\FLAGK.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q05: Vergleich NDIR ===
|
|
||||||
FC F:\TFILE\PRE\NDIR.OUT F:\TFILE\POST\NDIR.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q06: Vergleich DATES ===
|
|
||||||
FC F:\TFILE\PRE\DATES.OUT F:\TFILE\POST\DATES.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q07: Vergleich NDIR RIGHTS ===
|
|
||||||
FC F:\TFILE\PRE\RIGHTS.OUT F:\TFILE\POST\RIGHTS.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q08: Vergleich RIGHTS Directory ===
|
|
||||||
FC F:\TFILE\PRE\TRUST.OUT F:\TFILE\POST\TRUST.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q09: Vergleich RIGHTS A.TXT ===
|
|
||||||
FC F:\TFILE\PRE\TRUSTA.OUT F:\TFILE\POST\TRUSTA.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q10: POST-Ausgaben anzeigen: FLAG A ===
|
|
||||||
TYPE F:\TFILE\POST\FLAGA.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q11: POST-Ausgaben anzeigen: FLAG B ===
|
|
||||||
TYPE F:\TFILE\POST\FLAGB.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q12: POST-Ausgaben anzeigen: FLAG KEEP ===
|
|
||||||
TYPE F:\TFILE\POST\FLAGK.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q13: POST NDIR ===
|
|
||||||
TYPE F:\TFILE\POST\NDIR.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q14: POST DATES ===
|
|
||||||
TYPE F:\TFILE\POST\DATES.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q15: Cleanup Attribute ===
|
|
||||||
NPUBLIC\FLAG F:\TFILE\A.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TFILE\B.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TFILE\KEEP.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TFILE\SUBDIR\C.TXT N
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === Q16: Final NDIR ===
|
|
||||||
NPUBLIC\NDIR F:\TFILE
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === FILPOSTN fertig ===
|
|
||||||
ECHO.
|
|
||||||
ECHO Vergleichsdateien liegen hier:
|
|
||||||
ECHO F:\TFILE\PRE\*.OUT
|
|
||||||
ECHO F:\TFILE\POST\*.OUT
|
|
||||||
ECHO.
|
|
||||||
ECHO Im Serverlog pruefen:
|
|
||||||
ECHO FILER Info-Readback
|
|
||||||
ECHO NCP22/25 change bits bei Aenderungen
|
|
||||||
ECHO NCP22/25 Set Directory/File Information
|
|
||||||
ECHO xattr-Metadaten falls FILER passende Felder setzt
|
|
||||||
ECHO keine unerwarteten Completion Codes
|
|
||||||
ECHO.
|
|
||||||
@@ -1,153 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM FILPREN.BAT
|
|
||||||
REM Novell-only FILER pre-test setup for MARS NWE.
|
|
||||||
REM
|
|
||||||
REM Run this first, then run NPUBLIC\FILER manually.
|
|
||||||
REM After exiting FILER, run FILPOSTN.BAT.
|
|
||||||
REM
|
|
||||||
REM Testordner:
|
|
||||||
REM F:\TFILE
|
|
||||||
REM
|
|
||||||
REM Vergleichsdateien:
|
|
||||||
REM F:\TFILE\PRE\*.OUT
|
|
||||||
REM F:\TFILE\POST\*.OUT
|
|
||||||
REM
|
|
||||||
REM Wichtig:
|
|
||||||
REM Die Ausgaben werden per Redirect in Dateien geschrieben, damit
|
|
||||||
REM FILPOSTN.BAT sie spaeter mit FC vergleichen kann.
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === FILPREN: Novell FILER Pre-Test ===
|
|
||||||
ECHO.
|
|
||||||
ECHO Schrittfolge:
|
|
||||||
ECHO 1. FILPREN.BAT ausfuehren
|
|
||||||
ECHO 2. NPUBLIC\FILER manuell starten
|
|
||||||
ECHO 3. In FILER F:\TFILE pruefen/aendern
|
|
||||||
ECHO 4. FILPOSTN.BAT ausfuehren
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === P00: Testordner vorbereiten ===
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
REM --- Clean generated test/result directories (contents only). ---
|
|
||||||
IF EXIST TFILE\NUL DELTREE /Y TFILE\*.*
|
|
||||||
IF NOT EXIST TFILE MD TFILE
|
|
||||||
CD TFILE
|
|
||||||
IF NOT EXIST PRE MD PRE
|
|
||||||
IF NOT EXIST POST MD POST
|
|
||||||
ECHO FILER TEST A > A.TXT
|
|
||||||
ECHO FILER TEST B > B.TXT
|
|
||||||
ECHO FILER KEEP > KEEP.TXT
|
|
||||||
IF NOT EXIST SUBDIR MD SUBDIR
|
|
||||||
ECHO FILER SUB C > SUBDIR\C.TXT
|
|
||||||
CD \
|
|
||||||
ECHO.
|
|
||||||
ECHO Angelegt/geprueft:
|
|
||||||
ECHO F:\TFILE\A.TXT
|
|
||||||
ECHO F:\TFILE\B.TXT
|
|
||||||
ECHO F:\TFILE\KEEP.TXT
|
|
||||||
ECHO F:\TFILE\SUBDIR\C.TXT
|
|
||||||
ECHO F:\TFILE\PRE
|
|
||||||
ECHO F:\TFILE\POST
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === P01: Alte Vergleichsausgaben loeschen ===
|
|
||||||
DEL F:\TFILE\PRE\*.OUT
|
|
||||||
DEL F:\TFILE\POST\*.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === P02: Attribute normalisieren ===
|
|
||||||
NPUBLIC\FLAG F:\TFILE\A.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TFILE\B.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TFILE\KEEP.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TFILE\SUBDIR\C.TXT N
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === P03: Referenz-Attribute vor FILER setzen ===
|
|
||||||
ECHO A.TXT: +H
|
|
||||||
ECHO B.TXT: +RO
|
|
||||||
ECHO KEEP.TXT: +A
|
|
||||||
NPUBLIC\FLAG F:\TFILE\A.TXT +H
|
|
||||||
NPUBLIC\FLAG F:\TFILE\B.TXT +RO
|
|
||||||
NPUBLIC\FLAG F:\TFILE\KEEP.TXT +A
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === P04: PRE-Ausgaben erzeugen ===
|
|
||||||
ECHO Schreibe PRE\FLAGA.OUT
|
|
||||||
NPUBLIC\FLAG F:\TFILE\A.TXT > F:\TFILE\PRE\FLAGA.OUT
|
|
||||||
ECHO Schreibe PRE\FLAGB.OUT
|
|
||||||
NPUBLIC\FLAG F:\TFILE\B.TXT > F:\TFILE\PRE\FLAGB.OUT
|
|
||||||
ECHO Schreibe PRE\FLAGK.OUT
|
|
||||||
NPUBLIC\FLAG F:\TFILE\KEEP.TXT > F:\TFILE\PRE\FLAGK.OUT
|
|
||||||
ECHO Schreibe PRE\NDIR.OUT
|
|
||||||
NPUBLIC\NDIR F:\TFILE > F:\TFILE\PRE\NDIR.OUT
|
|
||||||
ECHO Schreibe PRE\DATES.OUT
|
|
||||||
NPUBLIC\NDIR F:\TFILE /DATES > F:\TFILE\PRE\DATES.OUT
|
|
||||||
ECHO Schreibe PRE\RIGHTS.OUT
|
|
||||||
NPUBLIC\NDIR F:\TFILE /RIGHTS > F:\TFILE\PRE\RIGHTS.OUT
|
|
||||||
ECHO Schreibe PRE\TRUST.OUT
|
|
||||||
NPUBLIC\RIGHTS F:\TFILE > F:\TFILE\PRE\TRUST.OUT
|
|
||||||
ECHO Schreibe PRE\TRUSTA.OUT
|
|
||||||
NPUBLIC\RIGHTS F:\TFILE\A.TXT > F:\TFILE\PRE\TRUSTA.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === P05: PRE-Ausgaben kurz anzeigen ===
|
|
||||||
ECHO --- PRE FLAG A ---
|
|
||||||
TYPE F:\TFILE\PRE\FLAGA.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === P06: PRE FLAG B ===
|
|
||||||
TYPE F:\TFILE\PRE\FLAGB.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === P07: PRE FLAG KEEP ===
|
|
||||||
TYPE F:\TFILE\PRE\FLAGK.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === P08: PRE NDIR ===
|
|
||||||
TYPE F:\TFILE\PRE\NDIR.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === P09: PRE DATES ===
|
|
||||||
TYPE F:\TFILE\PRE\DATES.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === FILPREN fertig ===
|
|
||||||
ECHO.
|
|
||||||
ECHO Jetzt manuell starten:
|
|
||||||
ECHO.
|
|
||||||
ECHO NPUBLIC\FILER
|
|
||||||
ECHO.
|
|
||||||
ECHO In FILER:
|
|
||||||
ECHO - zu F:\TFILE wechseln
|
|
||||||
ECHO - A.TXT, B.TXT, KEEP.TXT, SUBDIR ansehen
|
|
||||||
ECHO - Attribute/Informationen aendern, wenn moeglich
|
|
||||||
ECHO - FILER verlassen
|
|
||||||
ECHO.
|
|
||||||
ECHO Danach ausfuehren:
|
|
||||||
ECHO.
|
|
||||||
ECHO FILPOSTN.BAT
|
|
||||||
ECHO.
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
# FILTSTM.TST
|
|
||||||
# MARS/dosutils FILER regression notes/spec.
|
|
||||||
#
|
|
||||||
# Test flow:
|
|
||||||
#
|
|
||||||
# 1. `FILPREN.BAT`
|
|
||||||
# - creates F:\TFILE
|
|
||||||
# - writes baseline output files to F:\TFILE\PRE\*.OUT
|
|
||||||
#
|
|
||||||
# 2. manual `NPUBLIC\FILER`
|
|
||||||
# - inspect/change files in F:\TFILE
|
|
||||||
#
|
|
||||||
# 3. `FILPOSTN.BAT`
|
|
||||||
# - writes post-FILER output files to F:\TFILE\POST\*.OUT
|
|
||||||
# - compares PRE vs POST with FC
|
|
||||||
#
|
|
||||||
# 4. optional `FILCMPN.BAT`
|
|
||||||
# - repeats only the comparisons
|
|
||||||
#
|
|
||||||
#
|
|
||||||
MANUAL FILER CHANGE SET:
|
|
||||||
Recommended controlled changes:
|
|
||||||
A.TXT toggle Hidden
|
|
||||||
B.TXT toggle Read Only
|
|
||||||
KEEP.TXT toggle Archive Needed
|
|
||||||
|
|
||||||
For a readback-only pass, inspect the same entries but do not save changes.
|
|
||||||
FILPOSTN.BAT should then show no FC differences.
|
|
||||||
|
|
||||||
|
|
||||||
Expected:
|
|
||||||
# - FC reports no differences if FILER was only inspected.
|
|
||||||
# - FC reports intentional differences if attributes/metadata were changed.
|
|
||||||
@@ -1,211 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM FILTSTN.BAT
|
|
||||||
REM Novell-only FILER baseline / manual GUI test prep for MARS NWE.
|
|
||||||
REM
|
|
||||||
REM NPUBLIC = originale Novell Tools
|
|
||||||
REM PUBLIC = MARS/dosutils Tools
|
|
||||||
REM
|
|
||||||
REM Testordner:
|
|
||||||
REM F:\TFILE
|
|
||||||
REM
|
|
||||||
REM Ziel:
|
|
||||||
REM - Testdaten fuer NPUBLIC\FILER vorbereiten
|
|
||||||
REM - Attribute/Rechte/Datum-Readback vor und nach FILER pruefen
|
|
||||||
REM - Serverlog fuer NCP22/25 Set Directory/File Information,
|
|
||||||
REM NCP22/1E Info-Readback, NCP23/F3/F4 und NCP87 beobachten
|
|
||||||
REM
|
|
||||||
REM FILER ist ein DOS-GUI-Tool. Der eigentliche FILER-Test ist manuell.
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === FILTSTN: Novell FILER Manual Baseline ===
|
|
||||||
ECHO.
|
|
||||||
ECHO Dieses Script bereitet F:\TFILE vor und startet danach NPUBLIC\FILER.
|
|
||||||
ECHO.
|
|
||||||
ECHO In FILER dann manuell:
|
|
||||||
ECHO 1. Zu F:\TFILE wechseln
|
|
||||||
ECHO 2. File/Directory Information fuer A.TXT, B.TXT, SUBDIR ansehen
|
|
||||||
ECHO 3. Attribute/Informationen aendern, wenn moeglich
|
|
||||||
ECHO 4. FILER verlassen
|
|
||||||
ECHO 5. Danach Readback-Sektionen im Script weiterlaufen lassen
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F00: Testordner vorbereiten ===
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
REM --- Clean generated test/result directories (contents only). ---
|
|
||||||
IF EXIST TFILE\NUL DELTREE /Y TFILE\*.*
|
|
||||||
IF NOT EXIST TFILE MD TFILE
|
|
||||||
CD TFILE
|
|
||||||
ECHO FILER TEST A > A.TXT
|
|
||||||
ECHO FILER TEST B > B.TXT
|
|
||||||
ECHO FILER KEEP > KEEP.TXT
|
|
||||||
IF NOT EXIST SUBDIR MD SUBDIR
|
|
||||||
ECHO FILER SUB C > SUBDIR\C.TXT
|
|
||||||
CD \
|
|
||||||
ECHO.
|
|
||||||
ECHO Angelegt/geprueft:
|
|
||||||
ECHO F:\TFILE\A.TXT
|
|
||||||
ECHO F:\TFILE\B.TXT
|
|
||||||
ECHO F:\TFILE\KEEP.TXT
|
|
||||||
ECHO F:\TFILE\SUBDIR\C.TXT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F01: Attribute normalisieren ===
|
|
||||||
NPUBLIC\FLAG F:\TFILE\A.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TFILE\B.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TFILE\KEEP.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TFILE\SUBDIR\C.TXT N
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F02: Ausgangszustand FLAG ===
|
|
||||||
NPUBLIC\FLAG F:\TFILE\A.TXT
|
|
||||||
ECHO.
|
|
||||||
NPUBLIC\FLAG F:\TFILE\B.TXT
|
|
||||||
ECHO.
|
|
||||||
NPUBLIC\FLAG F:\TFILE\KEEP.TXT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F03: Ausgangszustand NDIR ===
|
|
||||||
NPUBLIC\NDIR F:\TFILE
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F04: Ausgangszustand NDIR /DATES ===
|
|
||||||
NPUBLIC\NDIR F:\TFILE /DATES
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F05: Ausgangszustand NDIR /RIGHTS ===
|
|
||||||
NPUBLIC\NDIR F:\TFILE /RIGHTS
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F06: Ausgangszustand RIGHTS ===
|
|
||||||
NPUBLIC\RIGHTS F:\TFILE
|
|
||||||
ECHO.
|
|
||||||
NPUBLIC\RIGHTS F:\TFILE\A.TXT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F07: Referenz-Attribute vor FILER setzen ===
|
|
||||||
ECHO A.TXT: +H
|
|
||||||
ECHO B.TXT: +RO
|
|
||||||
ECHO KEEP.TXT: +A
|
|
||||||
NPUBLIC\FLAG F:\TFILE\A.TXT +H
|
|
||||||
NPUBLIC\FLAG F:\TFILE\B.TXT +RO
|
|
||||||
NPUBLIC\FLAG F:\TFILE\KEEP.TXT +A
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F08: Readback nach FLAG vor FILER ===
|
|
||||||
NPUBLIC\FLAG F:\TFILE\A.TXT
|
|
||||||
ECHO.
|
|
||||||
NPUBLIC\FLAG F:\TFILE\B.TXT
|
|
||||||
ECHO.
|
|
||||||
NPUBLIC\FLAG F:\TFILE\KEEP.TXT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F09: NDIR /DATES nach FLAG vor FILER ===
|
|
||||||
NPUBLIC\NDIR F:\TFILE /DATES
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F10: Jetzt NPUBLIC\FILER manuell testen ===
|
|
||||||
ECHO.
|
|
||||||
ECHO Hinweise fuer FILER:
|
|
||||||
ECHO - Directory auf F:\TFILE setzen
|
|
||||||
ECHO - A.TXT, B.TXT, KEEP.TXT, SUBDIR ansehen
|
|
||||||
ECHO - File/Directory Information anzeigen
|
|
||||||
ECHO - Wenn moeglich Attribute aendern:
|
|
||||||
ECHO A.TXT Hidden toggeln
|
|
||||||
ECHO B.TXT Read Only toggeln
|
|
||||||
ECHO KEEP.TXT Archive Needed toggeln
|
|
||||||
ECHO - Optional Directory Information von SUBDIR ansehen
|
|
||||||
ECHO - Danach FILER beenden
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
NPUBLIC\FILER
|
|
||||||
ECHO.
|
|
||||||
ECHO FILER beendet.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F11: Readback FLAG nach FILER ===
|
|
||||||
NPUBLIC\FLAG F:\TFILE\A.TXT
|
|
||||||
ECHO.
|
|
||||||
NPUBLIC\FLAG F:\TFILE\B.TXT
|
|
||||||
ECHO.
|
|
||||||
NPUBLIC\FLAG F:\TFILE\KEEP.TXT
|
|
||||||
ECHO.
|
|
||||||
NPUBLIC\FLAG F:\TFILE\SUBDIR\C.TXT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F12: Readback NDIR nach FILER ===
|
|
||||||
NPUBLIC\NDIR F:\TFILE
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F13: Readback NDIR /DATES nach FILER ===
|
|
||||||
NPUBLIC\NDIR F:\TFILE /DATES
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F14: Readback NDIR /RIGHTS nach FILER ===
|
|
||||||
NPUBLIC\NDIR F:\TFILE /RIGHTS
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F15: Readback RIGHTS nach FILER ===
|
|
||||||
NPUBLIC\RIGHTS F:\TFILE
|
|
||||||
ECHO.
|
|
||||||
NPUBLIC\RIGHTS F:\TFILE\A.TXT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F16: Cleanup Attribute ===
|
|
||||||
NPUBLIC\FLAG F:\TFILE\A.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TFILE\B.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TFILE\KEEP.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TFILE\SUBDIR\C.TXT N
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === F17: Final NDIR ===
|
|
||||||
NPUBLIC\NDIR F:\TFILE
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === FILTSTN fertig ===
|
|
||||||
ECHO.
|
|
||||||
ECHO Im Serverlog pruefen:
|
|
||||||
ECHO FILER Info-Readback
|
|
||||||
ECHO NCP22/25 change bits bei Aenderungen
|
|
||||||
ECHO NCP22/25 Set Directory/File Information
|
|
||||||
ECHO xattr-Metadaten falls FILER passende Felder setzt
|
|
||||||
ECHO keine unerwarteten Completion Codes
|
|
||||||
ECHO.
|
|
||||||
@@ -1,172 +0,0 @@
|
|||||||
# FILER tests
|
|
||||||
|
|
||||||
Manual Novell FILER baseline with pre/post output comparison.
|
|
||||||
|
|
||||||
## Files
|
|
||||||
|
|
||||||
| File | Purpose |
|
|
||||||
| --- | --- |
|
|
||||||
| `FILPREN.BAT` | Pre-FILER setup and baseline output capture. |
|
|
||||||
| `FILPOSTN.BAT` | Post-FILER output capture, compare, and cleanup. |
|
|
||||||
| `FILCMPN.BAT` | Repeat PRE/POST comparisons only. |
|
|
||||||
| `FILTSTM.TST` | MARS/dosutils regression notes/spec for the scenario. |
|
|
||||||
|
|
||||||
## Test flow
|
|
||||||
|
|
||||||
```text
|
|
||||||
FILPREN.BAT
|
|
||||||
NPUBLIC\FILER
|
|
||||||
FILPOSTN.BAT
|
|
||||||
```
|
|
||||||
|
|
||||||
Optional repeat compare:
|
|
||||||
|
|
||||||
```text
|
|
||||||
FILCMPN.BAT
|
|
||||||
```
|
|
||||||
|
|
||||||
## Output comparison
|
|
||||||
|
|
||||||
`FILPREN.BAT` writes baseline files to:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\TFILE\PRE\*.OUT
|
|
||||||
```
|
|
||||||
|
|
||||||
`FILPOSTN.BAT` writes post-FILER files to:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\TFILE\POST\*.OUT
|
|
||||||
```
|
|
||||||
|
|
||||||
Then `FC` compares:
|
|
||||||
|
|
||||||
```text
|
|
||||||
FLAGA.OUT
|
|
||||||
FLAGB.OUT
|
|
||||||
FLAGK.OUT
|
|
||||||
NDIR.OUT
|
|
||||||
DATES.OUT
|
|
||||||
RIGHTS.OUT
|
|
||||||
TRUST.OUT
|
|
||||||
TRUSTA.OUT
|
|
||||||
```
|
|
||||||
|
|
||||||
No differences are expected if FILER was only used for inspection.
|
|
||||||
Intentional differences are expected if attributes or metadata were changed in FILER.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Manual changes to perform in FILER
|
|
||||||
|
|
||||||
The FILER screen starts at `MARS\SYS:NPUBLIC`. Use the menu to navigate and make a small, controlled change set.
|
|
||||||
|
|
||||||
### 1. Go to the test directory
|
|
||||||
|
|
||||||
Use:
|
|
||||||
|
|
||||||
```text
|
|
||||||
Select Current Directory
|
|
||||||
```
|
|
||||||
|
|
||||||
Change to:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\TFILE
|
|
||||||
```
|
|
||||||
|
|
||||||
or the equivalent NetWare path:
|
|
||||||
|
|
||||||
```text
|
|
||||||
MARS\SYS:TFILE
|
|
||||||
```
|
|
||||||
|
|
||||||
Then use:
|
|
||||||
|
|
||||||
```text
|
|
||||||
Directory Contents
|
|
||||||
```
|
|
||||||
|
|
||||||
You should see:
|
|
||||||
|
|
||||||
```text
|
|
||||||
A.TXT
|
|
||||||
B.TXT
|
|
||||||
KEEP.TXT
|
|
||||||
SUBDIR
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Inspect file and directory information
|
|
||||||
|
|
||||||
Open/inspect the information screen for:
|
|
||||||
|
|
||||||
```text
|
|
||||||
A.TXT
|
|
||||||
B.TXT
|
|
||||||
KEEP.TXT
|
|
||||||
SUBDIR
|
|
||||||
SUBDIR\C.TXT
|
|
||||||
```
|
|
||||||
|
|
||||||
Just opening these screens should exercise the server info-readback paths without changing anything.
|
|
||||||
|
|
||||||
### 3. Make one or more intentional attribute changes
|
|
||||||
|
|
||||||
Use FILER to change only a few obvious attributes, so the `PRE` versus `POST` compare is easy to understand.
|
|
||||||
|
|
||||||
Suggested changes:
|
|
||||||
|
|
||||||
```text
|
|
||||||
A.TXT Hidden: toggle
|
|
||||||
B.TXT Read Only: toggle
|
|
||||||
KEEP.TXT Archive Needed: toggle
|
|
||||||
```
|
|
||||||
|
|
||||||
If FILER allows editing directory attributes, also inspect `SUBDIR`, but keep directory changes minimal.
|
|
||||||
|
|
||||||
### 4. Optional no-change pass
|
|
||||||
|
|
||||||
For a pure readback test, do not change anything in FILER. Then `FILPOSTN.BAT` should show no `FC` differences except harmless output/date formatting differences.
|
|
||||||
|
|
||||||
### 5. Expected compare results
|
|
||||||
|
|
||||||
After leaving FILER, run:
|
|
||||||
|
|
||||||
```text
|
|
||||||
FILPOSTN.BAT
|
|
||||||
```
|
|
||||||
|
|
||||||
Expected results:
|
|
||||||
|
|
||||||
```text
|
|
||||||
No FILER changes:
|
|
||||||
FC should report no differences for the PRE/POST files.
|
|
||||||
|
|
||||||
Changed A.TXT Hidden:
|
|
||||||
FLAGA.OUT, NDIR.OUT, DATES.OUT may differ.
|
|
||||||
|
|
||||||
Changed B.TXT Read Only:
|
|
||||||
FLAGB.OUT, NDIR.OUT, DATES.OUT may differ.
|
|
||||||
|
|
||||||
Changed KEEP.TXT Archive Needed:
|
|
||||||
FLAGK.OUT, NDIR.OUT, DATES.OUT may differ.
|
|
||||||
|
|
||||||
Changed rights/trustees:
|
|
||||||
RIGHTS.OUT and/or TRUST*.OUT may differ.
|
|
||||||
```
|
|
||||||
|
|
||||||
The important part is that the differences match the intentional FILER changes and the server log shows no unexpected completion codes.
|
|
||||||
|
|
||||||
## Server log focus
|
|
||||||
|
|
||||||
Look for:
|
|
||||||
|
|
||||||
```text
|
|
||||||
NCP22/25
|
|
||||||
Set Directory/File Information
|
|
||||||
change bits
|
|
||||||
nwp_stat
|
|
||||||
nw_optain_file_dir_info
|
|
||||||
nw_search_file_dir
|
|
||||||
build_d_i
|
|
||||||
```
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM FLGC.BAT - helper for FLGTSTA user-context FLAG tests.
|
|
||||||
C:
|
|
||||||
CD \FLGTMP
|
|
||||||
ECHO FLGC helper started. > C:\FLGTMP\HELPER.TXT
|
|
||||||
ECHO Running FLAG as NOPASSUSER, then relogging SUPERVISOR. >> C:\FLGTMP\HELPER.TXT
|
|
||||||
|
|
||||||
LOGOUT > C:\FLGTMP\D00_LOG.OUT
|
|
||||||
LOGIN NOPASSUSER > C:\FLGTMP\D01_LGIN.OUT
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
ECHO Starting U10 read...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT > C:\FLGTMP\UNOV\U10_READ.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT > C:\FLGTMP\UPUB\U10_READ.OUT
|
|
||||||
|
|
||||||
ECHO Starting U11 N...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > C:\FLGTMP\UNOV\U11_N.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > C:\FLGTMP\UPUB\U11_N.OUT
|
|
||||||
|
|
||||||
ECHO Starting U12 H...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H > C:\FLGTMP\UNOV\U12_H.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> C:\FLGTMP\UNOV\U12_H.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H > C:\FLGTMP\UPUB\U12_H.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> C:\FLGTMP\UPUB\U12_H.OUT
|
|
||||||
|
|
||||||
ECHO Starting U13 RO...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT +RO > C:\FLGTMP\UNOV\U13_RO.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT >> C:\FLGTMP\UNOV\U13_RO.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT N > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\BETA.TXT +RO > C:\FLGTMP\UPUB\U13_RO.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\BETA.TXT >> C:\FLGTMP\UPUB\U13_RO.OUT
|
|
||||||
|
|
||||||
ECHO Starting U14 A...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT +A > C:\FLGTMP\UNOV\U14_A.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT >> C:\FLGTMP\UNOV\U14_A.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT N > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\GAMMA.DAT +A > C:\FLGTMP\UPUB\U14_A.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\GAMMA.DAT >> C:\FLGTMP\UPUB\U14_A.OUT
|
|
||||||
|
|
||||||
ECHO Starting U15 SY...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN +SY > C:\FLGTMP\UNOV\U15_SY.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN >> C:\FLGTMP\UNOV\U15_SY.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN N > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\DELTA.BIN +SY > C:\FLGTMP\UPUB\U15_SY.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\DELTA.BIN >> C:\FLGTMP\UPUB\U15_SY.OUT
|
|
||||||
|
|
||||||
ECHO Starting U16 DI RI...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT +DI +RI > C:\FLGTMP\UNOV\U16_DIRI.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT >> C:\FLGTMP\UNOV\U16_DIRI.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT N > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\EPS.TXT +DI +RI > C:\FLGTMP\UPUB\U16_DIRI.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\EPS.TXT >> C:\FLGTMP\UPUB\U16_DIRI.OUT
|
|
||||||
|
|
||||||
ECHO Starting U17 mixed...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H +RO +A > C:\FLGTMP\UNOV\U17_MIX.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> C:\FLGTMP\UNOV\U17_MIX.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H +RO +A > C:\FLGTMP\UPUB\U17_MIX.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> C:\FLGTMP\UPUB\U17_MIX.OUT
|
|
||||||
|
|
||||||
ECHO Starting U18 clear...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H +RO +A > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT -H -RO -A > C:\FLGTMP\UNOV\U18_CLR.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> C:\FLGTMP\UNOV\U18_CLR.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H +RO +A > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT -H -RO -A > C:\FLGTMP\UPUB\U18_CLR.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> C:\FLGTMP\UPUB\U18_CLR.OUT
|
|
||||||
|
|
||||||
ECHO Starting U90 missing...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\NOFILE.TXT > C:\FLGTMP\UNOV\U90_MISS.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\NOFILE.TXT > C:\FLGTMP\UPUB\U90_MISS.OUT
|
|
||||||
|
|
||||||
LOGOUT > C:\FLGTMP\D02_LGOT.OUT
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \LOGIN\LOGIN.EXE GOTO HAVELOGIN
|
|
||||||
ECHO F:\LOGIN\LOGIN.EXE not found. >> C:\FLGTMP\HELPER.TXT
|
|
||||||
GOTO END
|
|
||||||
:HAVELOGIN
|
|
||||||
F:\LOGIN\LOGIN SUPERVISOR /PWD:%LGNTPWD% > C:\FLGTMP\D03_LGSU.OUT
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \FLGTSTA.BAT GOTO QUEUEP2
|
|
||||||
ECHO F: not restored or FLGTSTA missing. >> C:\FLGTMP\HELPER.TXT
|
|
||||||
GOTO END
|
|
||||||
:QUEUEP2
|
|
||||||
C:
|
|
||||||
CD \FLGTMP
|
|
||||||
DLYSTRT /T:2 F:\FLGTSTA.BAT PART2 > C:\FLGTMP\D04_P2.OUT
|
|
||||||
:END
|
|
||||||
@@ -1,191 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM FLGTSTA.BAT
|
|
||||||
REM FLAG compare test.
|
|
||||||
REM
|
|
||||||
REM Direct part:
|
|
||||||
REM OUT = Novell baseline using \NPUBLIC\FLAG
|
|
||||||
REM PUBOUT = our implementation using \PUBLIC\FLAG
|
|
||||||
REM
|
|
||||||
REM User-context part:
|
|
||||||
REM NOPASSUSER logs in via DLYSTRT helper and runs the same effective tests.
|
|
||||||
REM UNOV = Novell FLAG as NOPASSUSER
|
|
||||||
REM UPUB = Public FLAG as NOPASSUSER
|
|
||||||
REM
|
|
||||||
REM For the automatic NOPASSUSER block set:
|
|
||||||
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: FLGTSTA [PART2]
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:PART1
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
REM --- Clean generated test/result directories. ---
|
|
||||||
IF EXIST FLGTEST\NUL DELTREE /Y FLGTEST\*.*
|
|
||||||
IF EXIST FLGCMP\NUL DELTREE /Y FLGCMP\*.*
|
|
||||||
IF EXIST FLGTMP\NUL DELTREE /Y FLGTMP\*.*
|
|
||||||
|
|
||||||
IF NOT EXIST FLGTEST\NUL MD FLGTEST
|
|
||||||
IF NOT EXIST FLGTMP\NUL MD FLGTMP
|
|
||||||
IF NOT EXIST FLGCMP\NUL MD FLGCMP
|
|
||||||
IF NOT EXIST FLGCMP\OUT\NUL MD FLGCMP\OUT
|
|
||||||
IF NOT EXIST FLGCMP\PUBOUT\NUL MD FLGCMP\PUBOUT
|
|
||||||
IF NOT EXIST FLGCMP\SETUP\NUL MD FLGCMP\SETUP
|
|
||||||
IF NOT EXIST FLGCMP\UNOV\NUL MD FLGCMP\UNOV
|
|
||||||
IF NOT EXIST FLGCMP\UPUB\NUL MD FLGCMP\UPUB
|
|
||||||
IF NOT EXIST FLGCMP\USETUP\NUL MD FLGCMP\USETUP
|
|
||||||
|
|
||||||
IF EXIST F:\FLGCMP\RUN.LOG DEL F:\FLGCMP\RUN.LOG
|
|
||||||
IF EXIST F:\FLGCMP\SUMMARY.TXT DEL F:\FLGCMP\SUMMARY.TXT
|
|
||||||
IF EXIST F:\FLGCMP\COMPARE.LOG DEL F:\FLGCMP\COMPARE.LOG
|
|
||||||
IF EXIST F:\FLGCMP\UCOMP.LOG DEL F:\FLGCMP\UCOMP.LOG
|
|
||||||
IF EXIST F:\FLGCMP\FLGTSTA.ZIP DEL F:\FLGCMP\FLGTSTA.ZIP
|
|
||||||
IF EXIST F:\FLGCMP\ZIP.LOG DEL F:\FLGCMP\ZIP.LOG
|
|
||||||
|
|
||||||
ECHO FLGTSTA FLAG compare > F:\FLGCMP\RUN.LOG
|
|
||||||
ECHO Direct compare: NPUBLIC\FLAG vs PUBLIC\FLAG. >> F:\FLGCMP\RUN.LOG
|
|
||||||
ECHO User context: NOPASSUSER via DLYSTRT if LGNTPWD is set. >> F:\FLGCMP\RUN.LOG
|
|
||||||
ECHO. >> F:\FLGCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO ALPHA FILE > F:\FLGTEST\ALPHA.TXT
|
|
||||||
ECHO BETA FILE > F:\FLGTEST\BETA.TXT
|
|
||||||
ECHO GAMMA FILE > F:\FLGTEST\GAMMA.DAT
|
|
||||||
ECHO DELTA FILE > F:\FLGTEST\DELTA.BIN
|
|
||||||
ECHO EPS FILE > F:\FLGTEST\EPS.TXT
|
|
||||||
|
|
||||||
ECHO Starting D10 read normal...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT > F:\FLGCMP\OUT\D10_READ.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT > F:\FLGCMP\PUBOUT\D10_READ.OUT
|
|
||||||
|
|
||||||
ECHO Starting D11 FLAG N...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > F:\FLGCMP\OUT\D11_N.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > F:\FLGCMP\PUBOUT\D11_N.OUT
|
|
||||||
|
|
||||||
ECHO Starting D12 +H...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H > F:\FLGCMP\OUT\D12_H.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> F:\FLGCMP\OUT\D12_H.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H > F:\FLGCMP\PUBOUT\D12_H.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> F:\FLGCMP\PUBOUT\D12_H.OUT
|
|
||||||
|
|
||||||
ECHO Starting D13 +RO...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT +RO > F:\FLGCMP\OUT\D13_RO.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT >> F:\FLGCMP\OUT\D13_RO.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT N > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\BETA.TXT +RO > F:\FLGCMP\PUBOUT\D13_RO.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\BETA.TXT >> F:\FLGCMP\PUBOUT\D13_RO.OUT
|
|
||||||
|
|
||||||
ECHO Starting D14 +A...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT +A > F:\FLGCMP\OUT\D14_A.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT >> F:\FLGCMP\OUT\D14_A.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT N > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\GAMMA.DAT +A > F:\FLGCMP\PUBOUT\D14_A.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\GAMMA.DAT >> F:\FLGCMP\PUBOUT\D14_A.OUT
|
|
||||||
|
|
||||||
ECHO Starting D15 +SY...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN +SY > F:\FLGCMP\OUT\D15_SY.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN >> F:\FLGCMP\OUT\D15_SY.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN N > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\DELTA.BIN +SY > F:\FLGCMP\PUBOUT\D15_SY.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\DELTA.BIN >> F:\FLGCMP\PUBOUT\D15_SY.OUT
|
|
||||||
|
|
||||||
ECHO Starting D16 +DI +RI...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT +DI +RI > F:\FLGCMP\OUT\D16_DIRI.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT >> F:\FLGCMP\OUT\D16_DIRI.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT N > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\EPS.TXT +DI +RI > F:\FLGCMP\PUBOUT\D16_DIRI.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\EPS.TXT >> F:\FLGCMP\PUBOUT\D16_DIRI.OUT
|
|
||||||
|
|
||||||
ECHO Starting D17 mixed flags...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H +RO +A > F:\FLGCMP\OUT\D17_MIX.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> F:\FLGCMP\OUT\D17_MIX.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H +RO +A > F:\FLGCMP\PUBOUT\D17_MIX.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> F:\FLGCMP\PUBOUT\D17_MIX.OUT
|
|
||||||
|
|
||||||
ECHO Starting D18 clear flags...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H +RO +A > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT -H -RO -A > F:\FLGCMP\OUT\D18_CLR.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> F:\FLGCMP\OUT\D18_CLR.OUT
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H +RO +A > NUL
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT -H -RO -A > F:\FLGCMP\PUBOUT\D18_CLR.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> F:\FLGCMP\PUBOUT\D18_CLR.OUT
|
|
||||||
|
|
||||||
ECHO Starting D90 missing file...
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\NOFILE.TXT > F:\FLGCMP\OUT\D90_MISS.OUT
|
|
||||||
PUBLIC\FLAG F:\FLGTEST\NOFILE.TXT > F:\FLGCMP\PUBOUT\D90_MISS.OUT
|
|
||||||
|
|
||||||
ECHO Comparing direct FLAG outputs... > F:\FLGCMP\COMPARE.LOG
|
|
||||||
FOR %%F IN (D10_READ.OUT D11_N.OUT D12_H.OUT D13_RO.OUT D14_A.OUT D15_SY.OUT D16_DIRI.OUT D17_MIX.OUT D18_CLR.OUT D90_MISS.OUT) DO FC F:\FLGCMP\OUT\%%F F:\FLGCMP\PUBOUT\%%F >> F:\FLGCMP\COMPARE.LOG
|
|
||||||
|
|
||||||
REM Prepare user-context test tree.
|
|
||||||
ECHO Preparing NOPASSUSER FLAG matrix... >> F:\FLGCMP\RUN.LOG
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN N > NUL
|
|
||||||
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT N > NUL
|
|
||||||
NPUBLIC\GRANT ALL FOR F:\FLGTEST TO USER NOPASSUSER > F:\FLGCMP\SETUP\S01_GRD.OUT
|
|
||||||
NPUBLIC\GRANT ALL FOR F:\FLGTEST\ALPHA.TXT TO USER NOPASSUSER /FILES > F:\FLGCMP\SETUP\S02_GRF.OUT
|
|
||||||
NPUBLIC\GRANT ALL FOR F:\FLGTEST\BETA.TXT TO USER NOPASSUSER /FILES >> F:\FLGCMP\SETUP\S02_GRF.OUT
|
|
||||||
NPUBLIC\GRANT ALL FOR F:\FLGTEST\GAMMA.DAT TO USER NOPASSUSER /FILES >> F:\FLGCMP\SETUP\S02_GRF.OUT
|
|
||||||
NPUBLIC\GRANT ALL FOR F:\FLGTEST\DELTA.BIN TO USER NOPASSUSER /FILES >> F:\FLGCMP\SETUP\S02_GRF.OUT
|
|
||||||
NPUBLIC\GRANT ALL FOR F:\FLGTEST\EPS.TXT TO USER NOPASSUSER /FILES >> F:\FLGCMP\SETUP\S02_GRF.OUT
|
|
||||||
|
|
||||||
IF "%LGNTPWD%"=="" GOTO NEEDPWD
|
|
||||||
|
|
||||||
IF EXIST C:\FLGTMP DELTREE /Y C:\FLGTMP > NUL
|
|
||||||
MD C:\FLGTMP
|
|
||||||
MD C:\FLGTMP\UNOV
|
|
||||||
MD C:\FLGTMP\UPUB
|
|
||||||
COPY F:\FLGC.BAT C:\FLGTMP\FLGC.BAT > NUL
|
|
||||||
COPY F:\PUBLIC\DLYSTRT.EXE C:\FLGTMP\DLYSTRT.EXE > NUL
|
|
||||||
|
|
||||||
C:
|
|
||||||
CD \FLGTMP
|
|
||||||
DLYSTRT /T:2 FLGC.BAT
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:NEEDPWD
|
|
||||||
ECHO LGNTPWD is not set. User-context FLAG block skipped. >> F:\FLGCMP\RUN.LOG
|
|
||||||
ECHO.
|
|
||||||
ECHO LGNTPWD ist nicht gesetzt. User-Kontext wurde nicht gestartet.
|
|
||||||
ECHO Beispiel:
|
|
||||||
ECHO SET LGNTPWD=dein-supervisor-passwort
|
|
||||||
ECHO FLGTSTA
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:PART2
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF NOT EXIST FLGCMP\UNOV\NUL MD FLGCMP\UNOV
|
|
||||||
IF NOT EXIST FLGCMP\UPUB\NUL MD FLGCMP\UPUB
|
|
||||||
IF EXIST F:\FLGCMP\UCOMP.LOG DEL F:\FLGCMP\UCOMP.LOG
|
|
||||||
COPY C:\FLGTMP\UNOV\*.OUT F:\FLGCMP\UNOV > NUL
|
|
||||||
COPY C:\FLGTMP\UPUB\*.OUT F:\FLGCMP\UPUB > NUL
|
|
||||||
IF EXIST C:\FLGTMP\HELPER.TXT COPY C:\FLGTMP\HELPER.TXT F:\FLGCMP > NUL
|
|
||||||
ECHO Comparing NOPASSUSER FLAG outputs... > F:\FLGCMP\UCOMP.LOG
|
|
||||||
FOR %%F IN (U10_READ.OUT U11_N.OUT U12_H.OUT U13_RO.OUT U14_A.OUT U15_SY.OUT U16_DIRI.OUT U17_MIX.OUT U18_CLR.OUT U90_MISS.OUT) DO FC F:\FLGCMP\UNOV\%%F F:\FLGCMP\UPUB\%%F >> F:\FLGCMP\UCOMP.LOG
|
|
||||||
ECHO FLGTSTA summary > F:\FLGCMP\SUMMARY.TXT
|
|
||||||
ECHO Direct compare: F:\FLGCMP\COMPARE.LOG >> F:\FLGCMP\SUMMARY.TXT
|
|
||||||
ECHO User compare: F:\FLGCMP\UCOMP.LOG >> F:\FLGCMP\SUMMARY.TXT
|
|
||||||
ECHO Optional: FLGTZIP ausfuehren. >> F:\FLGCMP\SUMMARY.TXT
|
|
||||||
ECHO.
|
|
||||||
ECHO FLGTSTA PART2 fertig. Optional FLGTZIP ausfuehren.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:END
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM FLGTZIP.BAT
|
|
||||||
REM Optional packer for FLGTSTA result files.
|
|
||||||
REM Requires ZIP.EXE in PATH or current directory.
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \FLGCMP
|
|
||||||
|
|
||||||
IF EXIST FLGTSTA.ZIP DEL FLGTSTA.ZIP
|
|
||||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
|
||||||
|
|
||||||
ECHO Creating FLGTSTA.ZIP > ZIP.LOG
|
|
||||||
ZIP -r FLGTSTA.ZIP RUN.LOG SUMMARY.TXT COMPARE.LOG UCOMP.LOG HELPER.TXT OUT PUBOUT SETUP UNOV UPUB USETUP >> ZIP.LOG
|
|
||||||
|
|
||||||
REM Cleanup generated test directories after ZIP.
|
|
||||||
ECHO Cleaning generated test directories... >> ZIP.LOG
|
|
||||||
IF EXIST \FLGTEST\NUL DELTREE /Y \FLGTEST >> ZIP.LOG
|
|
||||||
IF EXIST \FLGTMP\NUL DELTREE /Y \FLGTMP >> ZIP.LOG
|
|
||||||
CD \
|
|
||||||
ECHO.
|
|
||||||
ECHO ZIP step finished.
|
|
||||||
ECHO Check:
|
|
||||||
ECHO F:\FLGCMP\FLGTSTA.ZIP
|
|
||||||
ECHO F:\FLGCMP\ZIP.LOG
|
|
||||||
ECHO.
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
# FLAG automated compare test
|
|
||||||
|
|
||||||
Compares Novell `NPUBLIC\FLAG` against the current `PUBLIC\FLAG`.
|
|
||||||
|
|
||||||
## Run
|
|
||||||
|
|
||||||
For the direct compare only:
|
|
||||||
|
|
||||||
```text
|
|
||||||
FLGTSTA
|
|
||||||
```
|
|
||||||
|
|
||||||
For the full automatic NOPASSUSER context block, set the maintainer-login
|
|
||||||
password first:
|
|
||||||
|
|
||||||
```text
|
|
||||||
SET LGNTPWD=your-supervisor-password
|
|
||||||
FLGTSTA
|
|
||||||
```
|
|
||||||
|
|
||||||
`FLGTSTA` starts `C:\FLGTMP\FLGC.BAT` through `DLYSTRT`, logs in as
|
|
||||||
`NOPASSUSER`, runs `NPUBLIC\FLAG` and `PUBLIC\FLAG`, logs back in as
|
|
||||||
`SUPERVISOR` with `F:\LOGIN\LOGIN /PWD:`, and then queues
|
|
||||||
`FLGTSTA PART2`.
|
|
||||||
|
|
||||||
Package manually:
|
|
||||||
|
|
||||||
```text
|
|
||||||
FLGTZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
## Result directories
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\FLGCMP\OUT Novell FLAG direct baseline
|
|
||||||
F:\FLGCMP\PUBOUT PUBLIC FLAG direct output
|
|
||||||
F:\FLGCMP\COMPARE.LOG direct FC compare
|
|
||||||
F:\FLGCMP\UNOV Novell FLAG as NOPASSUSER
|
|
||||||
F:\FLGCMP\UPUB PUBLIC FLAG as NOPASSUSER
|
|
||||||
F:\FLGCMP\UCOMP.LOG NOPASSUSER FC compare
|
|
||||||
```
|
|
||||||
|
|
||||||
## Coverage
|
|
||||||
|
|
||||||
- `FLAG` display
|
|
||||||
- `FLAG ... N`
|
|
||||||
- set/clear `H`, `RO`, `A`, `SY`, `DI`, `RI`
|
|
||||||
- mixed flag combinations
|
|
||||||
- missing-file behavior
|
|
||||||
- same cases as `NOPASSUSER`
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM FDGC.BAT - helper for FDGTSTA user-context FLAGDIR tests.
|
|
||||||
C:
|
|
||||||
CD \FDGTMP
|
|
||||||
ECHO FDGC helper started. > C:\FDGTMP\HELPER.TXT
|
|
||||||
ECHO Running FLAGDIR as NOPASSUSER, then relogging SUPERVISOR. >> C:\FDGTMP\HELPER.TXT
|
|
||||||
|
|
||||||
LOGOUT > C:\FDGTMP\D00_LOG.OUT
|
|
||||||
LOGIN NOPASSUSER > C:\FDGTMP\D01_LGIN.OUT
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
ECHO Starting U10 read...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > NUL
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA > C:\FDGTMP\UNOV\U10_READ.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRA > C:\FDGTMP\UPUB\U10_READ.OUT
|
|
||||||
|
|
||||||
ECHO Starting U11 Hidden...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > NUL
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden > C:\FDGTMP\UNOV\U11_HID.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA >> C:\FDGTMP\UNOV\U11_HID.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > NUL
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden > C:\FDGTMP\UPUB\U11_HID.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRA >> C:\FDGTMP\UPUB\U11_HID.OUT
|
|
||||||
|
|
||||||
ECHO Starting U12 System...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB Normal > NUL
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB System > C:\FDGTMP\UNOV\U12_SYS.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB >> C:\FDGTMP\UNOV\U12_SYS.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB Normal > NUL
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRB System > C:\FDGTMP\UPUB\U12_SYS.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRB >> C:\FDGTMP\UPUB\U12_SYS.OUT
|
|
||||||
|
|
||||||
ECHO Starting U13 Purge...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Normal > NUL
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Purge > C:\FDGTMP\UNOV\U13_PUR.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC >> C:\FDGTMP\UNOV\U13_PUR.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Normal > NUL
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRC Purge > C:\FDGTMP\UPUB\U13_PUR.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRC >> C:\FDGTMP\UPUB\U13_PUR.OUT
|
|
||||||
|
|
||||||
ECHO Starting U14 Delete/Rename inhibit...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Normal > NUL
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Deleteinhibit Renameinhibit > C:\FDGTMP\UNOV\U14_DIRI.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB >> C:\FDGTMP\UNOV\U14_DIRI.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Normal > NUL
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Deleteinhibit Renameinhibit > C:\FDGTMP\UPUB\U14_DIRI.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB >> C:\FDGTMP\UPUB\U14_DIRI.OUT
|
|
||||||
|
|
||||||
ECHO Starting U15 Normal reset...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden System > NUL
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > C:\FDGTMP\UNOV\U15_NORM.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA >> C:\FDGTMP\UNOV\U15_NORM.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden System > NUL
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > C:\FDGTMP\UPUB\U15_NORM.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRA >> C:\FDGTMP\UPUB\U15_NORM.OUT
|
|
||||||
|
|
||||||
ECHO Starting U90 missing...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\MISSING > C:\FDGTMP\UNOV\U90_MISS.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\MISSING > C:\FDGTMP\UPUB\U90_MISS.OUT
|
|
||||||
|
|
||||||
LOGOUT > C:\FDGTMP\D02_LGOT.OUT
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \LOGIN\LOGIN.EXE GOTO HAVELOGIN
|
|
||||||
ECHO F:\LOGIN\LOGIN.EXE not found. >> C:\FDGTMP\HELPER.TXT
|
|
||||||
GOTO END
|
|
||||||
:HAVELOGIN
|
|
||||||
F:\LOGIN\LOGIN SUPERVISOR /PWD:%LGNTPWD% > C:\FDGTMP\D03_LGSU.OUT
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \FDGTSTA.BAT GOTO QUEUEP2
|
|
||||||
ECHO F: not restored or FDGTSTA missing. >> C:\FDGTMP\HELPER.TXT
|
|
||||||
GOTO END
|
|
||||||
:QUEUEP2
|
|
||||||
C:
|
|
||||||
CD \FDGTMP
|
|
||||||
DLYSTRT /T:2 F:\FDGTSTA.BAT PART2 > C:\FDGTMP\D04_P2.OUT
|
|
||||||
:END
|
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM FDGTSTA.BAT
|
|
||||||
REM FLAGDIR compare test.
|
|
||||||
REM
|
|
||||||
REM Direct part:
|
|
||||||
REM OUT = Novell baseline using \NPUBLIC\FLAGDIR
|
|
||||||
REM PUBOUT = our implementation using \PUBLIC\FLAGDIR
|
|
||||||
REM
|
|
||||||
REM User-context part:
|
|
||||||
REM NOPASSUSER logs in via DLYSTRT helper and runs the same effective tests.
|
|
||||||
|
|
||||||
IF "%1"=="" GOTO PART1
|
|
||||||
IF "%1"=="PART2" GOTO PART2
|
|
||||||
IF "%1"=="part2" GOTO PART2
|
|
||||||
IF "%1"=="Part2" GOTO PART2
|
|
||||||
ECHO Usage: FDGTSTA [PART2]
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:PART1
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
IF EXIST FDGTEST\NUL DELTREE /Y FDGTEST\*.*
|
|
||||||
IF EXIST FDGCMP\NUL DELTREE /Y FDGCMP\*.*
|
|
||||||
IF EXIST FDGTMP\NUL DELTREE /Y FDGTMP\*.*
|
|
||||||
|
|
||||||
IF NOT EXIST FDGTEST\NUL MD FDGTEST
|
|
||||||
IF NOT EXIST FDGTEST\DIRA\NUL MD FDGTEST\DIRA
|
|
||||||
IF NOT EXIST FDGTEST\DIRB\NUL MD FDGTEST\DIRB
|
|
||||||
IF NOT EXIST FDGTEST\DIRC\NUL MD FDGTEST\DIRC
|
|
||||||
IF NOT EXIST FDGTEST\DIRB\SUB\NUL MD FDGTEST\DIRB\SUB
|
|
||||||
IF NOT EXIST FDGCMP\NUL MD FDGCMP
|
|
||||||
IF NOT EXIST FDGCMP\OUT\NUL MD FDGCMP\OUT
|
|
||||||
IF NOT EXIST FDGCMP\PUBOUT\NUL MD FDGCMP\PUBOUT
|
|
||||||
IF NOT EXIST FDGCMP\SETUP\NUL MD FDGCMP\SETUP
|
|
||||||
IF NOT EXIST FDGCMP\UNOV\NUL MD FDGCMP\UNOV
|
|
||||||
IF NOT EXIST FDGCMP\UPUB\NUL MD FDGCMP\UPUB
|
|
||||||
|
|
||||||
IF EXIST F:\FDGCMP\RUN.LOG DEL F:\FDGCMP\RUN.LOG
|
|
||||||
IF EXIST F:\FDGCMP\SUMMARY.TXT DEL F:\FDGCMP\SUMMARY.TXT
|
|
||||||
IF EXIST F:\FDGCMP\COMPARE.LOG DEL F:\FDGCMP\COMPARE.LOG
|
|
||||||
IF EXIST F:\FDGCMP\UCOMP.LOG DEL F:\FDGCMP\UCOMP.LOG
|
|
||||||
IF EXIST F:\FDGCMP\FDGTSTA.ZIP DEL F:\FDGCMP\FDGTSTA.ZIP
|
|
||||||
IF EXIST F:\FDGCMP\ZIP.LOG DEL F:\FDGCMP\ZIP.LOG
|
|
||||||
|
|
||||||
ECHO SUB FILE > F:\FDGTEST\DIRB\SUB\SUB.TXT
|
|
||||||
ECHO FDGTSTA FLAGDIR compare > F:\FDGCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO Starting D10 read normal...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > NUL
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA > F:\FDGCMP\OUT\D10_READ.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRA > F:\FDGCMP\PUBOUT\D10_READ.OUT
|
|
||||||
|
|
||||||
ECHO Starting D11 Hidden...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > NUL
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden > F:\FDGCMP\OUT\D11_HID.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA >> F:\FDGCMP\OUT\D11_HID.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > NUL
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden > F:\FDGCMP\PUBOUT\D11_HID.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRA >> F:\FDGCMP\PUBOUT\D11_HID.OUT
|
|
||||||
|
|
||||||
ECHO Starting D12 System...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB Normal > NUL
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB System > F:\FDGCMP\OUT\D12_SYS.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB >> F:\FDGCMP\OUT\D12_SYS.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB Normal > NUL
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRB System > F:\FDGCMP\PUBOUT\D12_SYS.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRB >> F:\FDGCMP\PUBOUT\D12_SYS.OUT
|
|
||||||
|
|
||||||
ECHO Starting D13 Purge...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Normal > NUL
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Purge > F:\FDGCMP\OUT\D13_PUR.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC >> F:\FDGCMP\OUT\D13_PUR.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Normal > NUL
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRC Purge > F:\FDGCMP\PUBOUT\D13_PUR.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRC >> F:\FDGCMP\PUBOUT\D13_PUR.OUT
|
|
||||||
|
|
||||||
ECHO Starting D14 Delete/Rename inhibit...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Normal > NUL
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Deleteinhibit Renameinhibit > F:\FDGCMP\OUT\D14_DIRI.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB >> F:\FDGCMP\OUT\D14_DIRI.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Normal > NUL
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Deleteinhibit Renameinhibit > F:\FDGCMP\PUBOUT\D14_DIRI.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB >> F:\FDGCMP\PUBOUT\D14_DIRI.OUT
|
|
||||||
|
|
||||||
ECHO Starting D15 mixed reset...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden System > NUL
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > F:\FDGCMP\OUT\D15_NORM.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA >> F:\FDGCMP\OUT\D15_NORM.OUT
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden System > NUL
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > F:\FDGCMP\PUBOUT\D15_NORM.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\DIRA >> F:\FDGCMP\PUBOUT\D15_NORM.OUT
|
|
||||||
|
|
||||||
ECHO Starting D90 missing dir...
|
|
||||||
NPUBLIC\FLAGDIR F:\FDGTEST\MISSING > F:\FDGCMP\OUT\D90_MISS.OUT
|
|
||||||
PUBLIC\FLAGDIR F:\FDGTEST\MISSING > F:\FDGCMP\PUBOUT\D90_MISS.OUT
|
|
||||||
|
|
||||||
ECHO Comparing direct FLAGDIR outputs... > F:\FDGCMP\COMPARE.LOG
|
|
||||||
FOR %%F IN (D10_READ.OUT D11_HID.OUT D12_SYS.OUT D13_PUR.OUT D14_DIRI.OUT D15_NORM.OUT D90_MISS.OUT) DO FC F:\FDGCMP\OUT\%%F F:\FDGCMP\PUBOUT\%%F >> F:\FDGCMP\COMPARE.LOG
|
|
||||||
|
|
||||||
REM Grant NOPASSUSER enough rights for user-context directory flag tests.
|
|
||||||
NPUBLIC\GRANT ALL FOR F:\FDGTEST TO USER NOPASSUSER > F:\FDGCMP\SETUP\S01_GRD.OUT
|
|
||||||
NPUBLIC\GRANT ALL FOR F:\FDGTEST\DIRA TO USER NOPASSUSER >> F:\FDGCMP\SETUP\S01_GRD.OUT
|
|
||||||
NPUBLIC\GRANT ALL FOR F:\FDGTEST\DIRB TO USER NOPASSUSER >> F:\FDGCMP\SETUP\S01_GRD.OUT
|
|
||||||
NPUBLIC\GRANT ALL FOR F:\FDGTEST\DIRC TO USER NOPASSUSER >> F:\FDGCMP\SETUP\S01_GRD.OUT
|
|
||||||
NPUBLIC\GRANT ALL FOR F:\FDGTEST\DIRB\SUB TO USER NOPASSUSER >> F:\FDGCMP\SETUP\S01_GRD.OUT
|
|
||||||
|
|
||||||
IF "%LGNTPWD%"=="" GOTO NEEDPWD
|
|
||||||
|
|
||||||
IF EXIST C:\FDGTMP DELTREE /Y C:\FDGTMP > NUL
|
|
||||||
MD C:\FDGTMP
|
|
||||||
MD C:\FDGTMP\UNOV
|
|
||||||
MD C:\FDGTMP\UPUB
|
|
||||||
COPY F:\FDGC.BAT C:\FDGTMP\FDGC.BAT > NUL
|
|
||||||
COPY F:\PUBLIC\DLYSTRT.EXE C:\FDGTMP\DLYSTRT.EXE > NUL
|
|
||||||
|
|
||||||
C:
|
|
||||||
CD \FDGTMP
|
|
||||||
DLYSTRT /T:2 FDGC.BAT
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:NEEDPWD
|
|
||||||
ECHO LGNTPWD is not set. User-context FLAGDIR block skipped. >> F:\FDGCMP\RUN.LOG
|
|
||||||
ECHO.
|
|
||||||
ECHO LGNTPWD ist nicht gesetzt. User-Kontext wurde nicht gestartet.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:PART2
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF NOT EXIST FDGCMP\UNOV\NUL MD FDGCMP\UNOV
|
|
||||||
IF NOT EXIST FDGCMP\UPUB\NUL MD FDGCMP\UPUB
|
|
||||||
IF EXIST F:\FDGCMP\UCOMP.LOG DEL F:\FDGCMP\UCOMP.LOG
|
|
||||||
COPY C:\FDGTMP\UNOV\*.OUT F:\FDGCMP\UNOV > NUL
|
|
||||||
COPY C:\FDGTMP\UPUB\*.OUT F:\FDGCMP\UPUB > NUL
|
|
||||||
IF EXIST C:\FDGTMP\HELPER.TXT COPY C:\FDGTMP\HELPER.TXT F:\FDGCMP > NUL
|
|
||||||
ECHO Comparing NOPASSUSER FLAGDIR outputs... > F:\FDGCMP\UCOMP.LOG
|
|
||||||
FOR %%F IN (U10_READ.OUT U11_HID.OUT U12_SYS.OUT U13_PUR.OUT U14_DIRI.OUT U15_NORM.OUT U90_MISS.OUT) DO FC F:\FDGCMP\UNOV\%%F F:\FDGCMP\UPUB\%%F >> F:\FDGCMP\UCOMP.LOG
|
|
||||||
ECHO FDGTSTA summary > F:\FDGCMP\SUMMARY.TXT
|
|
||||||
ECHO Direct compare: F:\FDGCMP\COMPARE.LOG >> F:\FDGCMP\SUMMARY.TXT
|
|
||||||
ECHO User compare: F:\FDGCMP\UCOMP.LOG >> F:\FDGCMP\SUMMARY.TXT
|
|
||||||
ECHO Optional: FDGTZIP ausfuehren. >> F:\FDGCMP\SUMMARY.TXT
|
|
||||||
ECHO.
|
|
||||||
ECHO FDGTSTA PART2 fertig. Optional FDGTZIP ausfuehren.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:END
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM FDGTZIP.BAT
|
|
||||||
REM Optional packer for FDGTSTA result files.
|
|
||||||
REM Requires ZIP.EXE in PATH or current directory.
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \FDGCMP
|
|
||||||
|
|
||||||
IF EXIST FDGTSTA.ZIP DEL FDGTSTA.ZIP
|
|
||||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
|
||||||
|
|
||||||
ECHO Creating FDGTSTA.ZIP > ZIP.LOG
|
|
||||||
ZIP -r FDGTSTA.ZIP RUN.LOG SUMMARY.TXT COMPARE.LOG UCOMP.LOG HELPER.TXT OUT PUBOUT SETUP UNOV UPUB >> ZIP.LOG
|
|
||||||
|
|
||||||
REM Cleanup generated test directories after ZIP.
|
|
||||||
ECHO Cleaning generated test directories... >> ZIP.LOG
|
|
||||||
IF EXIST \FDGTEST\NUL DELTREE /Y \FDGTEST >> ZIP.LOG
|
|
||||||
IF EXIST \FDGTMP\NUL DELTREE /Y \FDGTMP >> ZIP.LOG
|
|
||||||
CD \
|
|
||||||
ECHO.
|
|
||||||
ECHO ZIP step finished.
|
|
||||||
ECHO Check:
|
|
||||||
ECHO F:\FDGCMP\FDGTSTA.ZIP
|
|
||||||
ECHO F:\FDGCMP\ZIP.LOG
|
|
||||||
ECHO.
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
# FLAGDIR automated compare test
|
|
||||||
|
|
||||||
Compares Novell `NPUBLIC\FLAGDIR` against the current `PUBLIC\FLAGDIR`.
|
|
||||||
|
|
||||||
## Run
|
|
||||||
|
|
||||||
For the direct compare only:
|
|
||||||
|
|
||||||
```text
|
|
||||||
FDGTSTA
|
|
||||||
```
|
|
||||||
|
|
||||||
For the automatic NOPASSUSER context block, set the maintainer-login password:
|
|
||||||
|
|
||||||
```text
|
|
||||||
SET LGNTPWD=your-supervisor-password
|
|
||||||
FDGTSTA
|
|
||||||
```
|
|
||||||
|
|
||||||
`FDGTSTA` starts `C:\FDGTMP\FDGC.BAT` through `DLYSTRT`, logs in as
|
|
||||||
`NOPASSUSER`, runs `NPUBLIC\FLAGDIR` and `PUBLIC\FLAGDIR`, logs back in as
|
|
||||||
`SUPERVISOR` with `F:\LOGIN\LOGIN /PWD:`, and then queues
|
|
||||||
`FDGTSTA PART2`.
|
|
||||||
|
|
||||||
Package manually:
|
|
||||||
|
|
||||||
```text
|
|
||||||
FDGTZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
## Result directories
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\FDGCMP\OUT Novell FLAGDIR direct baseline
|
|
||||||
F:\FDGCMP\PUBOUT PUBLIC FLAGDIR direct output
|
|
||||||
F:\FDGCMP\COMPARE.LOG direct FC compare
|
|
||||||
F:\FDGCMP\UNOV Novell FLAGDIR as NOPASSUSER
|
|
||||||
F:\FDGCMP\UPUB PUBLIC FLAGDIR as NOPASSUSER
|
|
||||||
F:\FDGCMP\UCOMP.LOG NOPASSUSER FC compare
|
|
||||||
```
|
|
||||||
|
|
||||||
## Coverage
|
|
||||||
|
|
||||||
- `FLAGDIR` display
|
|
||||||
- `Normal`
|
|
||||||
- `Hidden`
|
|
||||||
- `System`
|
|
||||||
- `Purge`
|
|
||||||
- `Deleteinhibit` / `Renameinhibit`
|
|
||||||
- missing-directory behavior
|
|
||||||
- same cases as `NOPASSUSER`
|
|
||||||
@@ -1,165 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM GRNTC.BAT - delayed user-context GRANT readback helper.
|
|
||||||
REM Started by GRNTSTA via DLYSTRT. Runs from C:\GRNTTMP.
|
|
||||||
|
|
||||||
C:
|
|
||||||
CD \GRNTTMP
|
|
||||||
|
|
||||||
ECHO GRNTC user-context GRANT readback helper > HELPER.TXT
|
|
||||||
ECHO Current phase: logout supervisor, login NOPASSUSER. >> HELPER.TXT
|
|
||||||
|
|
||||||
LOGOUT > ULOG1.OUT
|
|
||||||
LOGIN NOPASSUSER > ULOGIN.OUT
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \NPUBLIC\RIGHTS.EXE GOTO HAVEF
|
|
||||||
ECHO F: not ready after NOPASSUSER login. >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
GOTO RELSUP
|
|
||||||
|
|
||||||
:HAVEF
|
|
||||||
ECHO Starting G10_R as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G10 > C:\GRNTTMP\UNOV\G10_R.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G10 > C:\GRNTTMP\UPUB\G10_R.OUT
|
|
||||||
ECHO Starting G11_W as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G11 > C:\GRNTTMP\UNOV\G11_W.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G11 > C:\GRNTTMP\UPUB\G11_W.OUT
|
|
||||||
ECHO Starting G12_C as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G12 > C:\GRNTTMP\UNOV\G12_C.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G12 > C:\GRNTTMP\UPUB\G12_C.OUT
|
|
||||||
ECHO Starting G13_E as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G13 > C:\GRNTTMP\UNOV\G13_E.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G13 > C:\GRNTTMP\UPUB\G13_E.OUT
|
|
||||||
ECHO Starting G14_M as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G14 > C:\GRNTTMP\UNOV\G14_M.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G14 > C:\GRNTTMP\UPUB\G14_M.OUT
|
|
||||||
ECHO Starting G15_F as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G15 > C:\GRNTTMP\UNOV\G15_F.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G15 > C:\GRNTTMP\UPUB\G15_F.OUT
|
|
||||||
ECHO Starting G16_A as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G16 > C:\GRNTTMP\UNOV\G16_A.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G16 > C:\GRNTTMP\UPUB\G16_A.OUT
|
|
||||||
ECHO Starting G17_S as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G17 > C:\GRNTTMP\UNOV\G17_S.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G17 > C:\GRNTTMP\UPUB\G17_S.OUT
|
|
||||||
ECHO Starting G20_RF as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G20 > C:\GRNTTMP\UNOV\G20_RF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G20 > C:\GRNTTMP\UPUB\G20_RF.OUT
|
|
||||||
ECHO Starting G21_RW as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G21 > C:\GRNTTMP\UNOV\G21_RW.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G21 > C:\GRNTTMP\UPUB\G21_RW.OUT
|
|
||||||
ECHO Starting G22_RWC as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G22 > C:\GRNTTMP\UNOV\G22_RWC.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G22 > C:\GRNTTMP\UPUB\G22_RWC.OUT
|
|
||||||
ECHO Starting G23_RWCE as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G23 > C:\GRNTTMP\UNOV\G23_RWCE.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G23 > C:\GRNTTMP\UPUB\G23_RWCE.OUT
|
|
||||||
ECHO Starting G24_RAL as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G24 > C:\GRNTTMP\UNOV\G24_RAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G24 > C:\GRNTTMP\UPUB\G24_RAL.OUT
|
|
||||||
ECHO Starting G25_SAL as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G25 > C:\GRNTTMP\UNOV\G25_SAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G25 > C:\GRNTTMP\UPUB\G25_SAL.OUT
|
|
||||||
ECHO Starting G26_ALL as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G26 > C:\GRNTTMP\UNOV\G26_ALL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G26 > C:\GRNTTMP\UPUB\G26_ALL.OUT
|
|
||||||
ECHO Starting G27_N as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G27 > C:\GRNTTMP\UNOV\G27_N.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G27 > C:\GRNTTMP\UPUB\G27_N.OUT
|
|
||||||
ECHO Starting G30_RE as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G30 > C:\GRNTTMP\UNOV\G30_RE.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G30 > C:\GRNTTMP\UPUB\G30_RE.OUT
|
|
||||||
ECHO Starting G31_RWF as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G31 > C:\GRNTTMP\UNOV\G31_RWF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G31 > C:\GRNTTMP\UPUB\G31_RWF.OUT
|
|
||||||
ECHO Starting G32_RCM as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G32 > C:\GRNTTMP\UNOV\G32_RCM.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G32 > C:\GRNTTMP\UPUB\G32_RCM.OUT
|
|
||||||
ECHO Starting G33_RFA as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G33 > C:\GRNTTMP\UNOV\G33_RFA.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G33 > C:\GRNTTMP\UPUB\G33_RFA.OUT
|
|
||||||
ECHO Starting G34_WCM as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G34 > C:\GRNTTMP\UNOV\G34_WCM.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G34 > C:\GRNTTMP\UPUB\G34_WCM.OUT
|
|
||||||
ECHO Starting G35_EMF as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G35 > C:\GRNTTMP\UNOV\G35_EMF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G35 > C:\GRNTTMP\UPUB\G35_EMF.OUT
|
|
||||||
ECHO Starting G36_RMF as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G36 > C:\GRNTTMP\UNOV\G36_RMF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G36 > C:\GRNTTMP\UPUB\G36_RMF.OUT
|
|
||||||
ECHO Starting G37_REMA as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G37 > C:\GRNTTMP\UNOV\G37_REMA.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G37 > C:\GRNTTMP\UPUB\G37_REMA.OUT
|
|
||||||
ECHO Starting G38_SR as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G38 > C:\GRNTTMP\UNOV\G38_SR.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G38 > C:\GRNTTMP\UPUB\G38_SR.OUT
|
|
||||||
ECHO Starting G39_SRF as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G39 > C:\GRNTTMP\UNOV\G39_SRF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G39 > C:\GRNTTMP\UPUB\G39_SRF.OUT
|
|
||||||
ECHO Starting G40_SWCM as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\G40 > C:\GRNTTMP\UNOV\G40_SWCM.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\G40 > C:\GRNTTMP\UPUB\G40_SWCM.OUT
|
|
||||||
ECHO Starting F10_R as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\F10\T.TXT > C:\GRNTTMP\UNOV\F10_R.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\F10\T.TXT > C:\GRNTTMP\UPUB\F10_R.OUT
|
|
||||||
ECHO Starting F11_RF as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\F11\T.TXT > C:\GRNTTMP\UNOV\F11_RF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\F11\T.TXT > C:\GRNTTMP\UPUB\F11_RF.OUT
|
|
||||||
ECHO Starting F12_RAL as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\F12\T.TXT > C:\GRNTTMP\UNOV\F12_RAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\F12\T.TXT > C:\GRNTTMP\UPUB\F12_RAL.OUT
|
|
||||||
ECHO Starting F13_ALL as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\F13\T.TXT > C:\GRNTTMP\UNOV\F13_ALL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\F13\T.TXT > C:\GRNTTMP\UPUB\F13_ALL.OUT
|
|
||||||
ECHO Starting F14_N as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\F14\T.TXT > C:\GRNTTMP\UNOV\F14_N.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\F14\T.TXT > C:\GRNTTMP\UPUB\F14_N.OUT
|
|
||||||
ECHO Starting F15_S as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\F15\T.TXT > C:\GRNTTMP\UNOV\F15_S.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\F15\T.TXT > C:\GRNTTMP\UPUB\F15_S.OUT
|
|
||||||
ECHO Starting F16_SAL as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\F16\T.TXT > C:\GRNTTMP\UNOV\F16_SAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\F16\T.TXT > C:\GRNTTMP\UPUB\F16_SAL.OUT
|
|
||||||
ECHO Starting S10_R as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\S10\S1 > C:\GRNTTMP\UNOV\S10_R.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\S10\S1 > C:\GRNTTMP\UPUB\S10_R.OUT
|
|
||||||
ECHO Starting S11_RWC as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\S11\S1 > C:\GRNTTMP\UNOV\S11_RWC.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\S11\S1 > C:\GRNTTMP\UPUB\S11_RWC.OUT
|
|
||||||
ECHO Starting S12_ALL as NOPASSUSER... >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\GRNTEST\S12\S1 > C:\GRNTTMP\UNOV\S12_ALL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\GRNTEST\S12\S1 > C:\GRNTTMP\UPUB\S12_ALL.OUT
|
|
||||||
|
|
||||||
:RELSUP
|
|
||||||
C:
|
|
||||||
CD \GRNTTMP
|
|
||||||
LOGOUT > ULOG2.OUT
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \LOGIN\LOGIN.EXE GOTO HAVELOG
|
|
||||||
ECHO F:\LOGIN\LOGIN.EXE not found. >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
GOTO MANUAL
|
|
||||||
|
|
||||||
:HAVELOG
|
|
||||||
F:\LOGIN\LOGIN SUPERVISOR /PWD:%LGNTPWD% > C:\GRNTTMP\ULGSUP.OUT
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \GRNTSTA.BAT GOTO QUEUEP2
|
|
||||||
ECHO F: not restored or \GRNTSTA.BAT missing. >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
GOTO MANUAL
|
|
||||||
|
|
||||||
:QUEUEP2
|
|
||||||
C:
|
|
||||||
CD \GRNTTMP
|
|
||||||
DLYSTRT /T:2 F:\GRNTSTA.BAT PART2
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:MANUAL
|
|
||||||
ECHO Please run manually after SUPERVISOR login: >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
ECHO F: >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
ECHO CD \ >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
ECHO GRNTSTA PART2 >> C:\GRNTTMP\HELPER.TXT
|
|
||||||
|
|
||||||
:END
|
|
||||||
@@ -1,491 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM GRNTSTA.BAT
|
|
||||||
REM Automated GRANT comparison test for MARS NWE.
|
|
||||||
REM
|
|
||||||
REM Direct mode:
|
|
||||||
REM OUT = Novell baseline using \NPUBLIC\GRANT
|
|
||||||
REM PUBOUT = our implementation using \PUBLIC\GRANT
|
|
||||||
REM
|
|
||||||
REM User-context mode:
|
|
||||||
REM GRANT is run as SUPERVISOR against NOPASSUSER.
|
|
||||||
REM DLYSTRT starts C:\GRNTTMP\GRNTC.BAT after this script exits.
|
|
||||||
REM GRNTC logs in as NOPASSUSER and captures effective RIGHTS output.
|
|
||||||
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: GRNTSTA [PART2]
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:PART1
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
REM --- Clean generated test/result directories. ---
|
|
||||||
IF EXIST GRNTEST\*.* DELTREE /Y GRNTEST
|
|
||||||
IF EXIST GRNTCMP\*.* DELTREE /Y GRNTCMP
|
|
||||||
IF EXIST C:\GRNTTMP\*.* DELTREE /Y C:\GRNTTMP
|
|
||||||
|
|
||||||
IF NOT EXIST GRNTEST MD GRNTEST
|
|
||||||
IF NOT EXIST GRNTCMP MD GRNTCMP
|
|
||||||
IF NOT EXIST GRNTCMP\OUT MD GRNTCMP\OUT
|
|
||||||
IF NOT EXIST GRNTCMP\PUBOUT MD GRNTCMP\PUBOUT
|
|
||||||
IF NOT EXIST GRNTCMP\SETUP MD GRNTCMP\SETUP
|
|
||||||
IF NOT EXIST C:\GRNTTMP MD C:\GRNTTMP
|
|
||||||
IF NOT EXIST C:\GRNTTMP\UNOV MD C:\GRNTTMP\UNOV
|
|
||||||
IF NOT EXIST C:\GRNTTMP\UPUB MD C:\GRNTTMP\UPUB
|
|
||||||
IF NOT EXIST C:\GRNTTMP\USETUP MD C:\GRNTTMP\USETUP
|
|
||||||
|
|
||||||
ECHO GRNTSTA GRANT comparison test > F:\GRNTCMP\RUN.LOG
|
|
||||||
ECHO OUT = Novell baseline with \NPUBLIC\GRANT >> F:\GRNTCMP\RUN.LOG
|
|
||||||
ECHO PUBOUT = our implementation with \PUBLIC\GRANT >> F:\GRNTCMP\RUN.LOG
|
|
||||||
ECHO User-context target: NOPASSUSER >> F:\GRNTCMP\RUN.LOG
|
|
||||||
ECHO. >> F:\GRNTCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO Starting D01_HELP...
|
|
||||||
\NPUBLIC\GRANT /? > F:\GRNTCMP\OUT\D01_HELP.OUT
|
|
||||||
\PUBLIC\GRANT /? > F:\GRNTCMP\PUBOUT\D01_HELP.OUT
|
|
||||||
ECHO Starting D02_NOAR...
|
|
||||||
\NPUBLIC\GRANT > F:\GRNTCMP\OUT\D02_NOAR.OUT
|
|
||||||
\PUBLIC\GRANT > F:\GRNTCMP\PUBOUT\D02_NOAR.OUT
|
|
||||||
|
|
||||||
REM --- Setup matrix directories/files. ---
|
|
||||||
IF NOT EXIST GRNTEST\G10 MD GRNTEST\G10
|
|
||||||
ECHO G10_R > F:\GRNTEST\G10\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G11 MD GRNTEST\G11
|
|
||||||
ECHO G11_W > F:\GRNTEST\G11\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G12 MD GRNTEST\G12
|
|
||||||
ECHO G12_C > F:\GRNTEST\G12\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G13 MD GRNTEST\G13
|
|
||||||
ECHO G13_E > F:\GRNTEST\G13\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G14 MD GRNTEST\G14
|
|
||||||
ECHO G14_M > F:\GRNTEST\G14\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G15 MD GRNTEST\G15
|
|
||||||
ECHO G15_F > F:\GRNTEST\G15\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G16 MD GRNTEST\G16
|
|
||||||
ECHO G16_A > F:\GRNTEST\G16\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G17 MD GRNTEST\G17
|
|
||||||
ECHO G17_S > F:\GRNTEST\G17\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G20 MD GRNTEST\G20
|
|
||||||
ECHO G20_RF > F:\GRNTEST\G20\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G21 MD GRNTEST\G21
|
|
||||||
ECHO G21_RW > F:\GRNTEST\G21\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G22 MD GRNTEST\G22
|
|
||||||
ECHO G22_RWC > F:\GRNTEST\G22\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G23 MD GRNTEST\G23
|
|
||||||
ECHO G23_RWCE > F:\GRNTEST\G23\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G24 MD GRNTEST\G24
|
|
||||||
ECHO G24_RAL > F:\GRNTEST\G24\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G25 MD GRNTEST\G25
|
|
||||||
ECHO G25_SAL > F:\GRNTEST\G25\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G26 MD GRNTEST\G26
|
|
||||||
ECHO G26_ALL > F:\GRNTEST\G26\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G27 MD GRNTEST\G27
|
|
||||||
ECHO G27_N > F:\GRNTEST\G27\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G30 MD GRNTEST\G30
|
|
||||||
ECHO G30_RE > F:\GRNTEST\G30\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G31 MD GRNTEST\G31
|
|
||||||
ECHO G31_RWF > F:\GRNTEST\G31\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G32 MD GRNTEST\G32
|
|
||||||
ECHO G32_RCM > F:\GRNTEST\G32\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G33 MD GRNTEST\G33
|
|
||||||
ECHO G33_RFA > F:\GRNTEST\G33\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G34 MD GRNTEST\G34
|
|
||||||
ECHO G34_WCM > F:\GRNTEST\G34\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G35 MD GRNTEST\G35
|
|
||||||
ECHO G35_EMF > F:\GRNTEST\G35\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G36 MD GRNTEST\G36
|
|
||||||
ECHO G36_RMF > F:\GRNTEST\G36\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G37 MD GRNTEST\G37
|
|
||||||
ECHO G37_REMA > F:\GRNTEST\G37\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G38 MD GRNTEST\G38
|
|
||||||
ECHO G38_SR > F:\GRNTEST\G38\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G39 MD GRNTEST\G39
|
|
||||||
ECHO G39_SRF > F:\GRNTEST\G39\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\G40 MD GRNTEST\G40
|
|
||||||
ECHO G40_SWCM > F:\GRNTEST\G40\TEST.TXT
|
|
||||||
IF NOT EXIST GRNTEST\F10 MD GRNTEST\F10
|
|
||||||
ECHO F10_R > F:\GRNTEST\F10\T.TXT
|
|
||||||
IF NOT EXIST GRNTEST\F11 MD GRNTEST\F11
|
|
||||||
ECHO F11_RF > F:\GRNTEST\F11\T.TXT
|
|
||||||
IF NOT EXIST GRNTEST\F12 MD GRNTEST\F12
|
|
||||||
ECHO F12_RAL > F:\GRNTEST\F12\T.TXT
|
|
||||||
IF NOT EXIST GRNTEST\F13 MD GRNTEST\F13
|
|
||||||
ECHO F13_ALL > F:\GRNTEST\F13\T.TXT
|
|
||||||
IF NOT EXIST GRNTEST\F14 MD GRNTEST\F14
|
|
||||||
ECHO F14_N > F:\GRNTEST\F14\T.TXT
|
|
||||||
IF NOT EXIST GRNTEST\F15 MD GRNTEST\F15
|
|
||||||
ECHO F15_S > F:\GRNTEST\F15\T.TXT
|
|
||||||
IF NOT EXIST GRNTEST\F16 MD GRNTEST\F16
|
|
||||||
ECHO F16_SAL > F:\GRNTEST\F16\T.TXT
|
|
||||||
IF NOT EXIST GRNTEST\S10 MD GRNTEST\S10
|
|
||||||
IF NOT EXIST GRNTEST\S10\S1 MD GRNTEST\S10\S1
|
|
||||||
IF NOT EXIST GRNTEST\S10\S2 MD GRNTEST\S10\S2
|
|
||||||
ECHO S10_R > F:\GRNTEST\S10\S1\T.TXT
|
|
||||||
IF NOT EXIST GRNTEST\S11 MD GRNTEST\S11
|
|
||||||
IF NOT EXIST GRNTEST\S11\S1 MD GRNTEST\S11\S1
|
|
||||||
IF NOT EXIST GRNTEST\S11\S2 MD GRNTEST\S11\S2
|
|
||||||
ECHO S11_RWC > F:\GRNTEST\S11\S1\T.TXT
|
|
||||||
IF NOT EXIST GRNTEST\S12 MD GRNTEST\S12
|
|
||||||
IF NOT EXIST GRNTEST\S12\S1 MD GRNTEST\S12\S1
|
|
||||||
IF NOT EXIST GRNTEST\S12\S2 MD GRNTEST\S12\S2
|
|
||||||
ECHO S12_ALL > F:\GRNTEST\S12\S1\T.TXT
|
|
||||||
|
|
||||||
REM --- Direct GRANT output compare and leave PUBLIC state for user-context readback. ---
|
|
||||||
ECHO Starting G10_R directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G10 > F:\GRNTCMP\SETUP\G10_RNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R FOR F:\GRNTEST\G10 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G10_R.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G10 > F:\GRNTCMP\SETUP\G10_RPREM.OUT
|
|
||||||
\PUBLIC\GRANT R FOR F:\GRNTEST\G10 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G10_R.OUT
|
|
||||||
ECHO Starting G11_W directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G11 > F:\GRNTCMP\SETUP\G11_WNREM.OUT
|
|
||||||
\NPUBLIC\GRANT W FOR F:\GRNTEST\G11 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G11_W.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G11 > F:\GRNTCMP\SETUP\G11_WPREM.OUT
|
|
||||||
\PUBLIC\GRANT W FOR F:\GRNTEST\G11 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G11_W.OUT
|
|
||||||
ECHO Starting G12_C directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G12 > F:\GRNTCMP\SETUP\G12_CNREM.OUT
|
|
||||||
\NPUBLIC\GRANT C FOR F:\GRNTEST\G12 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G12_C.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G12 > F:\GRNTCMP\SETUP\G12_CPREM.OUT
|
|
||||||
\PUBLIC\GRANT C FOR F:\GRNTEST\G12 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G12_C.OUT
|
|
||||||
ECHO Starting G13_E directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G13 > F:\GRNTCMP\SETUP\G13_ENREM.OUT
|
|
||||||
\NPUBLIC\GRANT E FOR F:\GRNTEST\G13 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G13_E.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G13 > F:\GRNTCMP\SETUP\G13_EPREM.OUT
|
|
||||||
\PUBLIC\GRANT E FOR F:\GRNTEST\G13 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G13_E.OUT
|
|
||||||
ECHO Starting G14_M directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G14 > F:\GRNTCMP\SETUP\G14_MNREM.OUT
|
|
||||||
\NPUBLIC\GRANT M FOR F:\GRNTEST\G14 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G14_M.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G14 > F:\GRNTCMP\SETUP\G14_MPREM.OUT
|
|
||||||
\PUBLIC\GRANT M FOR F:\GRNTEST\G14 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G14_M.OUT
|
|
||||||
ECHO Starting G15_F directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G15 > F:\GRNTCMP\SETUP\G15_FNREM.OUT
|
|
||||||
\NPUBLIC\GRANT F FOR F:\GRNTEST\G15 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G15_F.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G15 > F:\GRNTCMP\SETUP\G15_FPREM.OUT
|
|
||||||
\PUBLIC\GRANT F FOR F:\GRNTEST\G15 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G15_F.OUT
|
|
||||||
ECHO Starting G16_A directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G16 > F:\GRNTCMP\SETUP\G16_ANREM.OUT
|
|
||||||
\NPUBLIC\GRANT A FOR F:\GRNTEST\G16 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G16_A.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G16 > F:\GRNTCMP\SETUP\G16_APREM.OUT
|
|
||||||
\PUBLIC\GRANT A FOR F:\GRNTEST\G16 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G16_A.OUT
|
|
||||||
ECHO Starting G17_S directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G17 > F:\GRNTCMP\SETUP\G17_SNREM.OUT
|
|
||||||
\NPUBLIC\GRANT S FOR F:\GRNTEST\G17 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G17_S.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G17 > F:\GRNTCMP\SETUP\G17_SPREM.OUT
|
|
||||||
\PUBLIC\GRANT S FOR F:\GRNTEST\G17 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G17_S.OUT
|
|
||||||
ECHO Starting G20_RF directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G20 > F:\GRNTCMP\SETUP\G20_RFNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R F FOR F:\GRNTEST\G20 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G20_RF.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G20 > F:\GRNTCMP\SETUP\G20_RFPREM.OUT
|
|
||||||
\PUBLIC\GRANT R F FOR F:\GRNTEST\G20 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G20_RF.OUT
|
|
||||||
ECHO Starting G21_RW directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G21 > F:\GRNTCMP\SETUP\G21_RWNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R W FOR F:\GRNTEST\G21 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G21_RW.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G21 > F:\GRNTCMP\SETUP\G21_RWPREM.OUT
|
|
||||||
\PUBLIC\GRANT R W FOR F:\GRNTEST\G21 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G21_RW.OUT
|
|
||||||
ECHO Starting G22_RWC directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G22 > F:\GRNTCMP\SETUP\G22_RWCNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R W C FOR F:\GRNTEST\G22 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G22_RWC.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G22 > F:\GRNTCMP\SETUP\G22_RWCPREM.OUT
|
|
||||||
\PUBLIC\GRANT R W C FOR F:\GRNTEST\G22 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G22_RWC.OUT
|
|
||||||
ECHO Starting G23_RWCE directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G23 > F:\GRNTCMP\SETUP\G23_RWCENREM.OUT
|
|
||||||
\NPUBLIC\GRANT R W C E FOR F:\GRNTEST\G23 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G23_RWCE.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G23 > F:\GRNTCMP\SETUP\G23_RWCEPREM.OUT
|
|
||||||
\PUBLIC\GRANT R W C E FOR F:\GRNTEST\G23 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G23_RWCE.OUT
|
|
||||||
ECHO Starting G24_RAL directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G24 > F:\GRNTCMP\SETUP\G24_RALNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R W C E M F A FOR F:\GRNTEST\G24 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G24_RAL.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G24 > F:\GRNTCMP\SETUP\G24_RALPREM.OUT
|
|
||||||
\PUBLIC\GRANT R W C E M F A FOR F:\GRNTEST\G24 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G24_RAL.OUT
|
|
||||||
ECHO Starting G25_SAL directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G25 > F:\GRNTCMP\SETUP\G25_SALNREM.OUT
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\GRNTEST\G25 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G25_SAL.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G25 > F:\GRNTCMP\SETUP\G25_SALPREM.OUT
|
|
||||||
\PUBLIC\GRANT S R W C E M F A FOR F:\GRNTEST\G25 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G25_SAL.OUT
|
|
||||||
ECHO Starting G26_ALL directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G26 > F:\GRNTCMP\SETUP\G26_ALLNREM.OUT
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\GRNTEST\G26 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G26_ALL.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G26 > F:\GRNTCMP\SETUP\G26_ALLPREM.OUT
|
|
||||||
\PUBLIC\GRANT ALL FOR F:\GRNTEST\G26 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G26_ALL.OUT
|
|
||||||
ECHO Starting G27_N directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G27 > F:\GRNTCMP\SETUP\G27_NNREM.OUT
|
|
||||||
\NPUBLIC\GRANT N FOR F:\GRNTEST\G27 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G27_N.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G27 > F:\GRNTCMP\SETUP\G27_NPREM.OUT
|
|
||||||
\PUBLIC\GRANT N FOR F:\GRNTEST\G27 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G27_N.OUT
|
|
||||||
ECHO Starting G30_RE directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G30 > F:\GRNTCMP\SETUP\G30_RENREM.OUT
|
|
||||||
\NPUBLIC\GRANT R E FOR F:\GRNTEST\G30 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G30_RE.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G30 > F:\GRNTCMP\SETUP\G30_REPREM.OUT
|
|
||||||
\PUBLIC\GRANT R E FOR F:\GRNTEST\G30 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G30_RE.OUT
|
|
||||||
ECHO Starting G31_RWF directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G31 > F:\GRNTCMP\SETUP\G31_RWFNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R W F FOR F:\GRNTEST\G31 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G31_RWF.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G31 > F:\GRNTCMP\SETUP\G31_RWFPREM.OUT
|
|
||||||
\PUBLIC\GRANT R W F FOR F:\GRNTEST\G31 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G31_RWF.OUT
|
|
||||||
ECHO Starting G32_RCM directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G32 > F:\GRNTCMP\SETUP\G32_RCMNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R C M FOR F:\GRNTEST\G32 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G32_RCM.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G32 > F:\GRNTCMP\SETUP\G32_RCMPREM.OUT
|
|
||||||
\PUBLIC\GRANT R C M FOR F:\GRNTEST\G32 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G32_RCM.OUT
|
|
||||||
ECHO Starting G33_RFA directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G33 > F:\GRNTCMP\SETUP\G33_RFANREM.OUT
|
|
||||||
\NPUBLIC\GRANT R F A FOR F:\GRNTEST\G33 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G33_RFA.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G33 > F:\GRNTCMP\SETUP\G33_RFAPREM.OUT
|
|
||||||
\PUBLIC\GRANT R F A FOR F:\GRNTEST\G33 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G33_RFA.OUT
|
|
||||||
ECHO Starting G34_WCM directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G34 > F:\GRNTCMP\SETUP\G34_WCMNREM.OUT
|
|
||||||
\NPUBLIC\GRANT W C M FOR F:\GRNTEST\G34 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G34_WCM.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G34 > F:\GRNTCMP\SETUP\G34_WCMPREM.OUT
|
|
||||||
\PUBLIC\GRANT W C M FOR F:\GRNTEST\G34 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G34_WCM.OUT
|
|
||||||
ECHO Starting G35_EMF directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G35 > F:\GRNTCMP\SETUP\G35_EMFNREM.OUT
|
|
||||||
\NPUBLIC\GRANT E M F FOR F:\GRNTEST\G35 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G35_EMF.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G35 > F:\GRNTCMP\SETUP\G35_EMFPREM.OUT
|
|
||||||
\PUBLIC\GRANT E M F FOR F:\GRNTEST\G35 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G35_EMF.OUT
|
|
||||||
ECHO Starting G36_RMF directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G36 > F:\GRNTCMP\SETUP\G36_RMFNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R W C M F FOR F:\GRNTEST\G36 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G36_RMF.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G36 > F:\GRNTCMP\SETUP\G36_RMFPREM.OUT
|
|
||||||
\PUBLIC\GRANT R W C M F FOR F:\GRNTEST\G36 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G36_RMF.OUT
|
|
||||||
ECHO Starting G37_REMA directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G37 > F:\GRNTCMP\SETUP\G37_REMANREM.OUT
|
|
||||||
\NPUBLIC\GRANT R E M A FOR F:\GRNTEST\G37 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G37_REMA.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G37 > F:\GRNTCMP\SETUP\G37_REMAPREM.OUT
|
|
||||||
\PUBLIC\GRANT R E M A FOR F:\GRNTEST\G37 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G37_REMA.OUT
|
|
||||||
ECHO Starting G38_SR directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G38 > F:\GRNTCMP\SETUP\G38_SRNREM.OUT
|
|
||||||
\NPUBLIC\GRANT S R FOR F:\GRNTEST\G38 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G38_SR.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G38 > F:\GRNTCMP\SETUP\G38_SRPREM.OUT
|
|
||||||
\PUBLIC\GRANT S R FOR F:\GRNTEST\G38 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G38_SR.OUT
|
|
||||||
ECHO Starting G39_SRF directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G39 > F:\GRNTCMP\SETUP\G39_SRFNREM.OUT
|
|
||||||
\NPUBLIC\GRANT S R F FOR F:\GRNTEST\G39 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G39_SRF.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G39 > F:\GRNTCMP\SETUP\G39_SRFPREM.OUT
|
|
||||||
\PUBLIC\GRANT S R F FOR F:\GRNTEST\G39 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G39_SRF.OUT
|
|
||||||
ECHO Starting G40_SWCM directory grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G40 > F:\GRNTCMP\SETUP\G40_SWCMNREM.OUT
|
|
||||||
\NPUBLIC\GRANT S W C M FOR F:\GRNTEST\G40 TO USER NOPASSUSER > F:\GRNTCMP\OUT\G40_SWCM.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\G40 > F:\GRNTCMP\SETUP\G40_SWCMPREM.OUT
|
|
||||||
\PUBLIC\GRANT S W C M FOR F:\GRNTEST\G40 TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\G40_SWCM.OUT
|
|
||||||
ECHO Starting F10_R file grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F10\T.TXT /FILES > F:\GRNTCMP\SETUP\F10_RNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R FOR F:\GRNTEST\F10\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\OUT\F10_R.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F10\T.TXT /FILES > F:\GRNTCMP\SETUP\F10_RPREM.OUT
|
|
||||||
\PUBLIC\GRANT R FOR F:\GRNTEST\F10\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\PUBOUT\F10_R.OUT
|
|
||||||
ECHO Starting F11_RF file grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F11\T.TXT /FILES > F:\GRNTCMP\SETUP\F11_RFNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R F FOR F:\GRNTEST\F11\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\OUT\F11_RF.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F11\T.TXT /FILES > F:\GRNTCMP\SETUP\F11_RFPREM.OUT
|
|
||||||
\PUBLIC\GRANT R F FOR F:\GRNTEST\F11\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\PUBOUT\F11_RF.OUT
|
|
||||||
ECHO Starting F12_RAL file grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F12\T.TXT /FILES > F:\GRNTCMP\SETUP\F12_RALNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R W C E M F A FOR F:\GRNTEST\F12\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\OUT\F12_RAL.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F12\T.TXT /FILES > F:\GRNTCMP\SETUP\F12_RALPREM.OUT
|
|
||||||
\PUBLIC\GRANT R W C E M F A FOR F:\GRNTEST\F12\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\PUBOUT\F12_RAL.OUT
|
|
||||||
ECHO Starting F13_ALL file grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F13\T.TXT /FILES > F:\GRNTCMP\SETUP\F13_ALLNREM.OUT
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\GRNTEST\F13\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\OUT\F13_ALL.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F13\T.TXT /FILES > F:\GRNTCMP\SETUP\F13_ALLPREM.OUT
|
|
||||||
\PUBLIC\GRANT ALL FOR F:\GRNTEST\F13\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\PUBOUT\F13_ALL.OUT
|
|
||||||
ECHO Starting F14_N file grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F14\T.TXT /FILES > F:\GRNTCMP\SETUP\F14_NNREM.OUT
|
|
||||||
\NPUBLIC\GRANT N FOR F:\GRNTEST\F14\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\OUT\F14_N.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F14\T.TXT /FILES > F:\GRNTCMP\SETUP\F14_NPREM.OUT
|
|
||||||
\PUBLIC\GRANT N FOR F:\GRNTEST\F14\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\PUBOUT\F14_N.OUT
|
|
||||||
ECHO Starting F15_S file grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F15\T.TXT /FILES > F:\GRNTCMP\SETUP\F15_SNREM.OUT
|
|
||||||
\NPUBLIC\GRANT S FOR F:\GRNTEST\F15\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\OUT\F15_S.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F15\T.TXT /FILES > F:\GRNTCMP\SETUP\F15_SPREM.OUT
|
|
||||||
\PUBLIC\GRANT S FOR F:\GRNTEST\F15\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\PUBOUT\F15_S.OUT
|
|
||||||
ECHO Starting F16_SAL file grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F16\T.TXT /FILES > F:\GRNTCMP\SETUP\F16_SALNREM.OUT
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\GRNTEST\F16\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\OUT\F16_SAL.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\F16\T.TXT /FILES > F:\GRNTCMP\SETUP\F16_SALPREM.OUT
|
|
||||||
\PUBLIC\GRANT S R W C E M F A FOR F:\GRNTEST\F16\T.TXT TO USER NOPASSUSER /FILES > F:\GRNTCMP\PUBOUT\F16_SAL.OUT
|
|
||||||
ECHO Starting S10_R subdir grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\S10 /SUBDIRS > F:\GRNTCMP\SETUP\S10_RNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R FOR F:\GRNTEST\S10 TO USER NOPASSUSER /SUBDIRECTORIES > F:\GRNTCMP\OUT\S10_R.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\S10 /SUBDIRS > F:\GRNTCMP\SETUP\S10_RPREM.OUT
|
|
||||||
\PUBLIC\GRANT R FOR F:\GRNTEST\S10 TO USER NOPASSUSER /SUBDIRECTORIES > F:\GRNTCMP\PUBOUT\S10_R.OUT
|
|
||||||
ECHO Starting S11_RWC subdir grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\S11 /SUBDIRS > F:\GRNTCMP\SETUP\S11_RWCNREM.OUT
|
|
||||||
\NPUBLIC\GRANT R W C FOR F:\GRNTEST\S11 TO USER NOPASSUSER /SUBDIRECTORIES > F:\GRNTCMP\OUT\S11_RWC.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\S11 /SUBDIRS > F:\GRNTCMP\SETUP\S11_RWCPREM.OUT
|
|
||||||
\PUBLIC\GRANT R W C FOR F:\GRNTEST\S11 TO USER NOPASSUSER /SUBDIRECTORIES > F:\GRNTCMP\PUBOUT\S11_RWC.OUT
|
|
||||||
ECHO Starting S12_ALL subdir grant...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\S12 /SUBDIRS > F:\GRNTCMP\SETUP\S12_ALLNREM.OUT
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\GRNTEST\S12 TO USER NOPASSUSER /SUBDIRECTORIES > F:\GRNTCMP\OUT\S12_ALL.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\GRNTEST\S12 /SUBDIRS > F:\GRNTCMP\SETUP\S12_ALLPREM.OUT
|
|
||||||
\PUBLIC\GRANT ALL FOR F:\GRNTEST\S12 TO USER NOPASSUSER /SUBDIRECTORIES > F:\GRNTCMP\PUBOUT\S12_ALL.OUT
|
|
||||||
|
|
||||||
ECHO Starting D90_BADR...
|
|
||||||
\NPUBLIC\GRANT BADRIGHT FOR F:\GRNTEST TO USER NOPASSUSER > F:\GRNTCMP\OUT\D90_BADR.OUT
|
|
||||||
\PUBLIC\GRANT BADRIGHT FOR F:\GRNTEST TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\D90_BADR.OUT
|
|
||||||
ECHO Starting D91_MISU...
|
|
||||||
\NPUBLIC\GRANT R F FOR F:\GRNTEST TO USER NO_SUCH_USER > F:\GRNTCMP\OUT\D91_MISU.OUT
|
|
||||||
\PUBLIC\GRANT R F FOR F:\GRNTEST TO USER NO_SUCH_USER > F:\GRNTCMP\PUBOUT\D91_MISU.OUT
|
|
||||||
ECHO Starting D92_MISP...
|
|
||||||
\NPUBLIC\GRANT R F FOR F:\GRNTEST\MISSING TO USER NOPASSUSER > F:\GRNTCMP\OUT\D92_MISP.OUT
|
|
||||||
\PUBLIC\GRANT R F FOR F:\GRNTEST\MISSING TO USER NOPASSUSER > F:\GRNTCMP\PUBOUT\D92_MISP.OUT
|
|
||||||
ECHO Starting D93_GRAM...
|
|
||||||
\NPUBLIC\GRANT R F FOR F:\GRNTEST NOPASSUSER > F:\GRNTCMP\OUT\D93_GRAM.OUT
|
|
||||||
\PUBLIC\GRANT R F FOR F:\GRNTEST NOPASSUSER > F:\GRNTCMP\PUBOUT\D93_GRAM.OUT
|
|
||||||
|
|
||||||
ECHO === COMPARE NOVELL OUT AGAINST PUBLIC OUT === > F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\D01_HELP.OUT F:\GRNTCMP\PUBOUT\D01_HELP.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\D02_NOAR.OUT F:\GRNTCMP\PUBOUT\D02_NOAR.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G10_R.OUT F:\GRNTCMP\PUBOUT\G10_R.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G11_W.OUT F:\GRNTCMP\PUBOUT\G11_W.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G12_C.OUT F:\GRNTCMP\PUBOUT\G12_C.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G13_E.OUT F:\GRNTCMP\PUBOUT\G13_E.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G14_M.OUT F:\GRNTCMP\PUBOUT\G14_M.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G15_F.OUT F:\GRNTCMP\PUBOUT\G15_F.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G16_A.OUT F:\GRNTCMP\PUBOUT\G16_A.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G17_S.OUT F:\GRNTCMP\PUBOUT\G17_S.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G20_RF.OUT F:\GRNTCMP\PUBOUT\G20_RF.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G21_RW.OUT F:\GRNTCMP\PUBOUT\G21_RW.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G22_RWC.OUT F:\GRNTCMP\PUBOUT\G22_RWC.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G23_RWCE.OUT F:\GRNTCMP\PUBOUT\G23_RWCE.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G24_RAL.OUT F:\GRNTCMP\PUBOUT\G24_RAL.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G25_SAL.OUT F:\GRNTCMP\PUBOUT\G25_SAL.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G26_ALL.OUT F:\GRNTCMP\PUBOUT\G26_ALL.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G27_N.OUT F:\GRNTCMP\PUBOUT\G27_N.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G30_RE.OUT F:\GRNTCMP\PUBOUT\G30_RE.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G31_RWF.OUT F:\GRNTCMP\PUBOUT\G31_RWF.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G32_RCM.OUT F:\GRNTCMP\PUBOUT\G32_RCM.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G33_RFA.OUT F:\GRNTCMP\PUBOUT\G33_RFA.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G34_WCM.OUT F:\GRNTCMP\PUBOUT\G34_WCM.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G35_EMF.OUT F:\GRNTCMP\PUBOUT\G35_EMF.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G36_RMF.OUT F:\GRNTCMP\PUBOUT\G36_RMF.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G37_REMA.OUT F:\GRNTCMP\PUBOUT\G37_REMA.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G38_SR.OUT F:\GRNTCMP\PUBOUT\G38_SR.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G39_SRF.OUT F:\GRNTCMP\PUBOUT\G39_SRF.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\G40_SWCM.OUT F:\GRNTCMP\PUBOUT\G40_SWCM.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\F10_R.OUT F:\GRNTCMP\PUBOUT\F10_R.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\F11_RF.OUT F:\GRNTCMP\PUBOUT\F11_RF.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\F12_RAL.OUT F:\GRNTCMP\PUBOUT\F12_RAL.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\F13_ALL.OUT F:\GRNTCMP\PUBOUT\F13_ALL.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\F14_N.OUT F:\GRNTCMP\PUBOUT\F14_N.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\F15_S.OUT F:\GRNTCMP\PUBOUT\F15_S.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\F16_SAL.OUT F:\GRNTCMP\PUBOUT\F16_SAL.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\S10_R.OUT F:\GRNTCMP\PUBOUT\S10_R.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\S11_RWC.OUT F:\GRNTCMP\PUBOUT\S11_RWC.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\S12_ALL.OUT F:\GRNTCMP\PUBOUT\S12_ALL.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\D90_BADR.OUT F:\GRNTCMP\PUBOUT\D90_BADR.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\D91_MISU.OUT F:\GRNTCMP\PUBOUT\D91_MISU.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\D92_MISP.OUT F:\GRNTCMP\PUBOUT\D92_MISP.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
FC F:\GRNTCMP\OUT\D93_GRAM.OUT F:\GRNTCMP\PUBOUT\D93_GRAM.OUT >> F:\GRNTCMP\COMPARE.LOG
|
|
||||||
|
|
||||||
IF "%LGNTPWD%"=="" GOTO NOUSER
|
|
||||||
IF NOT EXIST \PUBLIC\DLYSTRT.EXE GOTO NODLY
|
|
||||||
|
|
||||||
COPY \PUBLIC\DLYSTRT.EXE C:\GRNTTMP > NUL
|
|
||||||
COPY F:\GRNTC.BAT C:\GRNTTMP\GRNTC.BAT > NUL
|
|
||||||
C:
|
|
||||||
CD \GRNTTMP
|
|
||||||
DLYSTRT /T:2 GRNTC.BAT
|
|
||||||
GOTO STARTED
|
|
||||||
|
|
||||||
:NOUSER
|
|
||||||
ECHO LGNTPWD is not set. User-context part skipped. >> F:\GRNTCMP\RUN.LOG
|
|
||||||
ECHO.
|
|
||||||
ECHO LGNTPWD ist nicht gesetzt. User-context part skipped.
|
|
||||||
ECHO Fuer User-Kontext zuerst setzen:
|
|
||||||
ECHO SET LGNTPWD=dein-supervisor-passwort
|
|
||||||
GOTO SUMMARY
|
|
||||||
|
|
||||||
:NODLY
|
|
||||||
ECHO \PUBLIC\DLYSTRT.EXE not found. User-context part skipped. >> F:\GRNTCMP\RUN.LOG
|
|
||||||
ECHO.
|
|
||||||
ECHO \PUBLIC\DLYSTRT.EXE nicht gefunden. User-context part skipped.
|
|
||||||
GOTO SUMMARY
|
|
||||||
|
|
||||||
:STARTED
|
|
||||||
ECHO GRNTC queued via DLYSTRT. >> F:\GRNTCMP\RUN.LOG
|
|
||||||
ECHO.
|
|
||||||
ECHO GRNTC wurde via DLYSTRT gestartet.
|
|
||||||
ECHO Nach automatischem Re-Login wird GRNTSTA PART2 gestartet.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:SUMMARY
|
|
||||||
ECHO === SUMMARY === > F:\GRNTCMP\SUMMARY.TXT
|
|
||||||
ECHO GRNTSTA GRANT direct comparison finished. >> F:\GRNTCMP\SUMMARY.TXT
|
|
||||||
ECHO User-context part was skipped. >> F:\GRNTCMP\SUMMARY.TXT
|
|
||||||
ECHO Optional: GRNTZIP ausfuehren. >> F:\GRNTCMP\SUMMARY.TXT
|
|
||||||
ECHO GRNTSTA direct part finished.
|
|
||||||
ECHO Optional: GRNTZIP ausfuehren.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:PART2
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF NOT EXIST GRNTCMP MD GRNTCMP
|
|
||||||
IF NOT EXIST GRNTCMP\UNOV MD GRNTCMP\UNOV
|
|
||||||
IF NOT EXIST GRNTCMP\UPUB MD GRNTCMP\UPUB
|
|
||||||
IF NOT EXIST GRNTCMP\USETUP MD GRNTCMP\USETUP
|
|
||||||
|
|
||||||
COPY C:\GRNTTMP\UNOV\*.OUT F:\GRNTCMP\UNOV > NUL
|
|
||||||
COPY C:\GRNTTMP\UPUB\*.OUT F:\GRNTCMP\UPUB > NUL
|
|
||||||
COPY C:\GRNTTMP\USETUP\*.OUT F:\GRNTCMP\USETUP > NUL
|
|
||||||
IF EXIST C:\GRNTTMP\HELPER.TXT COPY C:\GRNTTMP\HELPER.TXT F:\GRNTCMP\HELPER.TXT > NUL
|
|
||||||
IF EXIST C:\GRNTTMP\ULOG1.OUT COPY C:\GRNTTMP\ULOG1.OUT F:\GRNTCMP\ULOG1.OUT > NUL
|
|
||||||
IF EXIST C:\GRNTTMP\ULOGIN.OUT COPY C:\GRNTTMP\ULOGIN.OUT F:\GRNTCMP\ULOGIN.OUT > NUL
|
|
||||||
IF EXIST C:\GRNTTMP\ULOG2.OUT COPY C:\GRNTTMP\ULOG2.OUT F:\GRNTCMP\ULOG2.OUT > NUL
|
|
||||||
IF EXIST C:\GRNTTMP\ULGSUP.OUT COPY C:\GRNTTMP\ULGSUP.OUT F:\GRNTCMP\ULGSUP.OUT > NUL
|
|
||||||
|
|
||||||
ECHO === COMPARE NOPASSUSER NOVELL RIGHTS AGAINST PUBLIC RIGHTS === > F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G10_R.OUT F:\GRNTCMP\UPUB\G10_R.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G11_W.OUT F:\GRNTCMP\UPUB\G11_W.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G12_C.OUT F:\GRNTCMP\UPUB\G12_C.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G13_E.OUT F:\GRNTCMP\UPUB\G13_E.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G14_M.OUT F:\GRNTCMP\UPUB\G14_M.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G15_F.OUT F:\GRNTCMP\UPUB\G15_F.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G16_A.OUT F:\GRNTCMP\UPUB\G16_A.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G17_S.OUT F:\GRNTCMP\UPUB\G17_S.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G20_RF.OUT F:\GRNTCMP\UPUB\G20_RF.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G21_RW.OUT F:\GRNTCMP\UPUB\G21_RW.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G22_RWC.OUT F:\GRNTCMP\UPUB\G22_RWC.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G23_RWCE.OUT F:\GRNTCMP\UPUB\G23_RWCE.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G24_RAL.OUT F:\GRNTCMP\UPUB\G24_RAL.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G25_SAL.OUT F:\GRNTCMP\UPUB\G25_SAL.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G26_ALL.OUT F:\GRNTCMP\UPUB\G26_ALL.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G27_N.OUT F:\GRNTCMP\UPUB\G27_N.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G30_RE.OUT F:\GRNTCMP\UPUB\G30_RE.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G31_RWF.OUT F:\GRNTCMP\UPUB\G31_RWF.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G32_RCM.OUT F:\GRNTCMP\UPUB\G32_RCM.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G33_RFA.OUT F:\GRNTCMP\UPUB\G33_RFA.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G34_WCM.OUT F:\GRNTCMP\UPUB\G34_WCM.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G35_EMF.OUT F:\GRNTCMP\UPUB\G35_EMF.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G36_RMF.OUT F:\GRNTCMP\UPUB\G36_RMF.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G37_REMA.OUT F:\GRNTCMP\UPUB\G37_REMA.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G38_SR.OUT F:\GRNTCMP\UPUB\G38_SR.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G39_SRF.OUT F:\GRNTCMP\UPUB\G39_SRF.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\G40_SWCM.OUT F:\GRNTCMP\UPUB\G40_SWCM.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\F10_R.OUT F:\GRNTCMP\UPUB\F10_R.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\F11_RF.OUT F:\GRNTCMP\UPUB\F11_RF.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\F12_RAL.OUT F:\GRNTCMP\UPUB\F12_RAL.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\F13_ALL.OUT F:\GRNTCMP\UPUB\F13_ALL.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\F14_N.OUT F:\GRNTCMP\UPUB\F14_N.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\F15_S.OUT F:\GRNTCMP\UPUB\F15_S.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\F16_SAL.OUT F:\GRNTCMP\UPUB\F16_SAL.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\S10_R.OUT F:\GRNTCMP\UPUB\S10_R.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\S11_RWC.OUT F:\GRNTCMP\UPUB\S11_RWC.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
FC F:\GRNTCMP\UNOV\S12_ALL.OUT F:\GRNTCMP\UPUB\S12_ALL.OUT >> F:\GRNTCMP\UCOMP.LOG
|
|
||||||
|
|
||||||
ECHO === SUMMARY === > F:\GRNTCMP\SUMMARY.TXT
|
|
||||||
ECHO GRNTSTA GRANT comparison finished. >> F:\GRNTCMP\SUMMARY.TXT
|
|
||||||
ECHO. >> F:\GRNTCMP\SUMMARY.TXT
|
|
||||||
ECHO Direct mode: OUT vs PUBOUT compares GRANT output. >> F:\GRNTCMP\SUMMARY.TXT
|
|
||||||
ECHO User mode: UNOV vs UPUB compares effective RIGHTS as NOPASSUSER. >> F:\GRNTCMP\SUMMARY.TXT
|
|
||||||
ECHO. >> F:\GRNTCMP\SUMMARY.TXT
|
|
||||||
ECHO Optional: GRNTZIP ausfuehren. >> F:\GRNTCMP\SUMMARY.TXT
|
|
||||||
|
|
||||||
ECHO GRNTSTA PART2 fertig.
|
|
||||||
ECHO Optional: GRNTZIP ausfuehren.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:END
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM GRNTZIP.BAT
|
|
||||||
REM Optional packer for GRNTSTA result files.
|
|
||||||
REM Requires ZIP.EXE in PATH or current directory.
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \GRNTCMP
|
|
||||||
|
|
||||||
IF EXIST GRNTSTA.ZIP DEL GRNTSTA.ZIP
|
|
||||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
|
||||||
|
|
||||||
ECHO Creating GRNTSTA.ZIP > ZIP.LOG
|
|
||||||
ZIP -r GRNTSTA.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 \GRNTEST\NUL DELTREE /Y \GRNTEST >> ZIP.LOG
|
|
||||||
IF EXIST C:\GRNTTMP\NUL DELTREE /Y C:\GRNTTMP >> ZIP.LOG
|
|
||||||
CD \
|
|
||||||
ECHO.
|
|
||||||
ECHO ZIP step finished.
|
|
||||||
ECHO Check:
|
|
||||||
ECHO F:\GRNTCMP\GRNTSTA.ZIP
|
|
||||||
ECHO F:\GRNTCMP\ZIP.LOG
|
|
||||||
ECHO.
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
# GRANT comparison test
|
|
||||||
|
|
||||||
Scripts:
|
|
||||||
|
|
||||||
- `GRNTSTA.BAT` creates `F:\GRNTEST`, compares Novell `\NPUBLIC\GRANT`
|
|
||||||
output against `\PUBLIC\GRANT`, and uses `NOPASSUSER` as trustee target.
|
|
||||||
- `GRNTC.BAT` is the delayed user-context helper started through `DLYSTRT`.
|
|
||||||
It logs in as `NOPASSUSER` and captures effective `RIGHTS` output for the
|
|
||||||
grants prepared by `GRNTSTA`.
|
|
||||||
- `GRNTZIP.BAT` packages the result tree as `F:\GRNTCMP\GRNTSTA.ZIP`.
|
|
||||||
|
|
||||||
Run as `SUPERVISOR` or an equivalent user.
|
|
||||||
|
|
||||||
For the automatic user-context part, set the Supervisor password first:
|
|
||||||
|
|
||||||
```bat
|
|
||||||
SET LGNTPWD=your-supervisor-password
|
|
||||||
GRNTSTA
|
|
||||||
```
|
|
||||||
|
|
||||||
Result directories:
|
|
||||||
|
|
||||||
- `OUT` contains Novell `GRANT` output.
|
|
||||||
- `PUBOUT` contains public implementation `GRANT` output.
|
|
||||||
- `COMPARE.LOG` compares `OUT` against `PUBOUT`.
|
|
||||||
- `UNOV` contains Novell `RIGHTS` output captured as `NOPASSUSER`.
|
|
||||||
- `UPUB` contains public implementation `RIGHTS` output captured as `NOPASSUSER`.
|
|
||||||
- `UCOMP.LOG` compares `UNOV` against `UPUB`.
|
|
||||||
- `SETUP` and `USETUP` contain setup/cleanup command output.
|
|
||||||
|
|
||||||
Covered grant cases:
|
|
||||||
|
|
||||||
- single rights: `R`, `W`, `C`, `E`, `M`, `F`, `A`, `S`
|
|
||||||
- combinations: `R F`, `R W`, `R W C`, `R W C E`,
|
|
||||||
`R W C E M F A`, `S R W C E M F A`, `ALL`, `N`
|
|
||||||
- mixed combinations: `R E`, `R W F`, `R C M`, `R F A`,
|
|
||||||
`W C M`, `E M F`, `R W C M F`, `R E M A`, `S R`, `S R F`, `S W C M`
|
|
||||||
- file trustee cases with `/FILES`
|
|
||||||
- recursive directory cases with `/SUBDIRECTORIES`
|
|
||||||
- help, no-argument and error/grammar cases
|
|
||||||
|
|
||||||
`GRNTZIP` remains manual so the result tree can be inspected before packaging.
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM LGNTC.BAT
|
|
||||||
REM Helper for LGNTSTA.BAT. Output survives LOGOUT/LOGIN on local C:.
|
|
||||||
REM LOGIN/MAP/LOGOUT are copied to C:\LGNTTMP by LGNTSTA.
|
|
||||||
REM
|
|
||||||
REM Important: LOGIN can change the current drive/search path. Therefore all
|
|
||||||
REM tool calls and all redirected output files use absolute C:\LGNTTMP paths.
|
|
||||||
|
|
||||||
C:
|
|
||||||
CD \LGNTTMP
|
|
||||||
|
|
||||||
ECHO LGNTC helper started. > C:\LGNTTMP\HELPER.TXT
|
|
||||||
ECHO This helper intentionally changes login state. >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
ECHO It was started by DLYSTRT after LGNTSTA Part 1 returned. >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
ECHO. >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
|
|
||||||
ECHO === D01 LOGOUT from initial supervisor session === >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
C:\LGNTTMP\LOGOUT > C:\LGNTTMP\D01_LOG.OUT
|
|
||||||
|
|
||||||
ECHO === D02 LOGIN NOPASSUSER using local Novell LOGIN === >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
C:\LGNTTMP\LOGIN NOPASSUSER > C:\LGNTTMP\D02_LGIN.OUT
|
|
||||||
|
|
||||||
ECHO === D03 MAP after NOPASSUSER login using local Novell MAP === >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
C:\LGNTTMP\MAP > C:\LGNTTMP\D03_MAP.OUT
|
|
||||||
|
|
||||||
ECHO === D04 LOGOUT NOPASSUSER === >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
C:\LGNTTMP\LOGOUT > C:\LGNTTMP\D04_LGOT.OUT
|
|
||||||
|
|
||||||
REM Novell LOGIN /? may print usage directly to the console instead of stdout.
|
|
||||||
REM Store the observed simple syntax as baseline for later implementation tests.
|
|
||||||
ECHO Usage: LOGIN [server/]user > C:\LGNTTMP\D99_HELP.OUT
|
|
||||||
|
|
||||||
IF "%LGNTPWD%"=="" GOTO MANUAL
|
|
||||||
|
|
||||||
ECHO === D05 LOGIN SUPERVISOR using maintainer F:\LOGIN\LOGIN /PWD option === >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \LOGIN\LOGIN.EXE GOTO HAVELOGINF
|
|
||||||
ECHO F:\LOGIN\LOGIN.EXE not found before supervisor relogin. >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
ECHO.
|
|
||||||
ECHO F:\LOGIN\LOGIN.EXE nicht gefunden.
|
|
||||||
ECHO Bitte manuell als SUPERVISOR einloggen und danach ausfuehren:
|
|
||||||
ECHO F:
|
|
||||||
ECHO CD \
|
|
||||||
ECHO LGNTSTA PART2
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:HAVELOGINF
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
F:\LOGIN\LOGIN SUPERVISOR /PWD:%LGNTPWD% > C:\LGNTTMP\D05_LGSUP.OUT
|
|
||||||
|
|
||||||
ECHO === Check F: before queuing LGNTSTA PART2 === >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \LGNTSTA.BAT GOTO QUEUEP2
|
|
||||||
ECHO F: not restored or \LGNTSTA.BAT missing after supervisor login. >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
ECHO.
|
|
||||||
ECHO F: wurde nicht wiederhergestellt oder \LGNTSTA.BAT fehlt.
|
|
||||||
ECHO Bitte manuell pruefen und dann ausfuehren:
|
|
||||||
ECHO F:
|
|
||||||
ECHO CD \
|
|
||||||
ECHO LGNTSTA PART2
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:QUEUEP2
|
|
||||||
ECHO F: is available. Queueing delayed LGNTSTA PART2 only. >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
C:
|
|
||||||
CD \LGNTTMP
|
|
||||||
DLYSTRT /T:2 F:\LGNTSTA.BAT PART2 > C:\LGNTTMP\D06_P2.OUT
|
|
||||||
ECHO LGNTC queued F:\LGNTSTA.BAT PART2. LGNTZIP is intentionally not automatic. >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
ECHO.
|
|
||||||
ECHO LGNTC fertig. PART2 wird per DLYSTRT gestartet.
|
|
||||||
ECHO LGNTZIP danach bei Bedarf manuell ausfuehren.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:MANUAL
|
|
||||||
ECHO LGNTPWD is not set; automatic SUPERVISOR login skipped. >> C:\LGNTTMP\HELPER.TXT
|
|
||||||
ECHO.
|
|
||||||
ECHO LGNTC fertig. Jetzt manuell wieder als SUPERVISOR einloggen:
|
|
||||||
ECHO F:\LOGIN\LOGIN SUPERVISOR
|
|
||||||
ECHO Danach ausfuehren:
|
|
||||||
ECHO F:\LGNTSTA PART2
|
|
||||||
ECHO LGNTZIP danach bei Bedarf manuell ausfuehren.
|
|
||||||
ECHO.
|
|
||||||
|
|
||||||
:END
|
|
||||||
@@ -1,160 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM LGNTSTA.BAT
|
|
||||||
REM Automated LOGIN/LOGOUT baseline test for MARS NWE.
|
|
||||||
REM
|
|
||||||
REM START from F: while logged in as SUPERVISOR:
|
|
||||||
REM SET LGNTPWD=your-supervisor-password
|
|
||||||
REM F:\LGNTSTA
|
|
||||||
REM
|
|
||||||
REM LGNTSTA prepares C:\LGNTTMP, installs a delayed start for LGNTC.BAT,
|
|
||||||
REM and then exits while F: is still available. DLYSTRT starts the local
|
|
||||||
REM C: helper after a short delay. The helper logs out, logs in as
|
|
||||||
REM NOPASSUSER, captures MAP, logs out, then logs in as SUPERVISOR again
|
|
||||||
REM using F:\LOGIN\LOGIN /PWD:%LGNTPWD%, then queues PART2 with DLYSTRT.
|
|
||||||
REM LGNTZIP is not started automatically.
|
|
||||||
REM
|
|
||||||
REM SYS:LOGIN / SYS:PUBLIC are NOT overwritten by this test.
|
|
||||||
|
|
||||||
IF "%1"=="" GOTO PART1
|
|
||||||
IF "%1"=="PART2" GOTO PART2
|
|
||||||
IF "%1"=="PARt2" GOTO PART2
|
|
||||||
IF "%1"=="PArT2" GOTO PART2
|
|
||||||
IF "%1"=="PArt2" GOTO PART2
|
|
||||||
IF "%1"=="PaRT2" GOTO PART2
|
|
||||||
IF "%1"=="PaRt2" GOTO PART2
|
|
||||||
IF "%1"=="ParT2" GOTO PART2
|
|
||||||
IF "%1"=="Part2" GOTO PART2
|
|
||||||
IF "%1"=="pART2" GOTO PART2
|
|
||||||
IF "%1"=="pARt2" GOTO PART2
|
|
||||||
IF "%1"=="pArT2" GOTO PART2
|
|
||||||
IF "%1"=="pArt2" GOTO PART2
|
|
||||||
IF "%1"=="paRT2" GOTO PART2
|
|
||||||
IF "%1"=="paRt2" GOTO PART2
|
|
||||||
IF "%1"=="parT2" GOTO PART2
|
|
||||||
IF "%1"=="part2" GOTO PART2
|
|
||||||
GOTO USAGE
|
|
||||||
|
|
||||||
:PART1
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
IF NOT "%LGNTPWD%"=="" GOTO PWDCHECKOK
|
|
||||||
ECHO ERROR: LGNTPWD ist nicht gesetzt.
|
|
||||||
ECHO.
|
|
||||||
ECHO Fuer den vollautomatischen LOGIN/LOGOUT-Test zuerst setzen, z.B.:
|
|
||||||
ECHO SET LGNTPWD=dein-supervisor-passwort
|
|
||||||
ECHO Danach starten:
|
|
||||||
ECHO F:\LGNTSTA
|
|
||||||
ECHO.
|
|
||||||
ECHO Es wurde kein DLYSTRT installiert und kein Login-Test gestartet.
|
|
||||||
GOTO END
|
|
||||||
:PWDCHECKOK
|
|
||||||
|
|
||||||
REM --- Recreate generated result/temp directories. ---
|
|
||||||
IF EXIST LGNTCMP DELTREE /Y LGNTCMP
|
|
||||||
MD LGNTCMP > NUL
|
|
||||||
MD LGNTCMP\OUT > NUL
|
|
||||||
|
|
||||||
ECHO LGNTSTA LOGIN/LOGOUT test > F:\LGNTCMP\RUN.LOG
|
|
||||||
ECHO Part 1 started while logged in as SUPERVISOR. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
ECHO Helper will use user NOPASSUSER on server MARS. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
ECHO This test uses DLYSTRT so F:\LGNTSTA can finish before LOGOUT. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
ECHO SYS:LOGIN, SYS:PUBLIC, and SYS:NPUBLIC are not modified. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
ECHO. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO LGNTPWD is set; automatic SUPERVISOR login is enabled. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
|
|
||||||
IF EXIST C:\LGNTTMP DELTREE /Y C:\LGNTTMP
|
|
||||||
MD C:\LGNTTMP > NUL
|
|
||||||
|
|
||||||
REM --- Copy Novell baseline tools to local C: directory only. ---
|
|
||||||
REM Do not overwrite SYS:LOGIN, SYS:PUBLIC, or SYS:NPUBLIC.
|
|
||||||
REM LOGIN/MAP are from NLOGIN, LOGOUT is from NPUBLIC.
|
|
||||||
ECHO Copying Novell runtime tools to C:\LGNTTMP. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
COPY \NLOGIN\LOGIN.* C:\LGNTTMP >> F:\LGNTCMP\RUN.LOG
|
|
||||||
COPY \NLOGIN\MAP.* C:\LGNTTMP >> F:\LGNTCMP\RUN.LOG
|
|
||||||
COPY \NPUBLIC\LOGOUT.* C:\LGNTTMP >> F:\LGNTCMP\RUN.LOG
|
|
||||||
|
|
||||||
REM DLYSTRT is also copied to C: so the whole delayed phase uses local tools.
|
|
||||||
IF EXIST \PUBLIC\DLYSTRT.EXE GOTO HAVEDLY
|
|
||||||
ECHO ERROR: \PUBLIC\DLYSTRT.EXE not found. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
ECHO ERROR: \PUBLIC\DLYSTRT.EXE not found.
|
|
||||||
ECHO Build/install dostools with MAINTAINER_BUILD=ON.
|
|
||||||
GOTO END
|
|
||||||
:HAVEDLY
|
|
||||||
COPY \PUBLIC\DLYSTRT.EXE C:\LGNTTMP >> F:\LGNTCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO Copying helper to C:\LGNTTMP\LGNTC.BAT >> F:\LGNTCMP\RUN.LOG
|
|
||||||
COPY F:\LGNTC.BAT C:\LGNTTMP >> F:\LGNTCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO Installing delayed helper start from local C:\LGNTTMP. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
IF EXIST C:\LGNTTMP\DLYSTRT.EXE GOTO HAVEDLYLOCAL
|
|
||||||
ECHO ERROR: C:\LGNTTMP\DLYSTRT.EXE not copied. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
ECHO ERROR: C:\LGNTTMP\DLYSTRT.EXE not copied.
|
|
||||||
GOTO END
|
|
||||||
:HAVEDLYLOCAL
|
|
||||||
REM Switch to C: before installing DLYSTRT. The delayed command is
|
|
||||||
REM typed into the current DOS prompt, so the prompt must not still be F:.
|
|
||||||
C:
|
|
||||||
CD \LGNTTMP
|
|
||||||
DLYSTRT /T:2 LGNTC.BAT >> F:\LGNTCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
ECHO DLYSTRT installed LGNTC.BAT from C:\LGNTTMP. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
ECHO LGNTSTA Part 1 finished; helper will start from local C: after delay. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO LGNTSTA Part 1 fertig.
|
|
||||||
ECHO DLYSTRT startet gleich C:\LGNTTMP\LGNTC.BAT.
|
|
||||||
ECHO Bitte warten...
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:PART2
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
MD LGNTCMP > NUL
|
|
||||||
MD LGNTCMP\OUT > NUL
|
|
||||||
|
|
||||||
ECHO. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
ECHO Part 2 collecting files from C:\LGNTTMP. >> F:\LGNTCMP\RUN.LOG
|
|
||||||
COPY C:\LGNTTMP\*.OUT F:\LGNTCMP\OUT >> F:\LGNTCMP\RUN.LOG
|
|
||||||
COPY C:\LGNTTMP\*.TXT F:\LGNTCMP\OUT >> F:\LGNTCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === SUMMARY === > F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO LGNTSTA LOGIN/LOGOUT baseline finished. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO Novell LOGIN/MAP/LOGOUT were copied only to C:\LGNTTMP. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO LOGIN/MAP source: SYS:NLOGIN. LOGOUT source: SYS:NPUBLIC. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO SYS:LOGIN, SYS:PUBLIC, and SYS:NPUBLIC were not modified. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO DLYSTRT was used to start C:\LGNTTMP\LGNTC.BAT after Part 1 returned. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO Expected files: >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO - D01_LOG.OUT LOGOUT output from initial supervisor session. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO - D02_LGIN.OUT LOGIN NOPASSUSER baseline output. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO - D03_MAP.OUT MAP output after NOPASSUSER login. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO - D04_LGOT.OUT LOGOUT output from NOPASSUSER session. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO - D05_LGSU.OUT F:\LOGIN\LOGIN SUPERVISOR /PWD output. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO - D06_P2.OUT DLYSTRT output for delayed PART2 start. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO - D99_HELP.OUT Simulated LOGIN usage baseline if help is not redirectable. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO DLYSTRT.EXE was copied locally to C:\LGNTTMP before starting the helper and PART2. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO LGNTZIP is not started automatically; run it manually after inspection. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
ECHO Optional: LGNTZIP ausfuehren. >> F:\LGNTCMP\SUMMARY.TXT
|
|
||||||
|
|
||||||
ECHO LGNTSTA PART2 fertig.
|
|
||||||
ECHO Ergebnisse liegen in F:\LGNTCMP
|
|
||||||
ECHO Optional: LGNTZIP ausfuehren.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:USAGE
|
|
||||||
ECHO Usage: LGNTSTA [PART2]
|
|
||||||
ECHO.
|
|
||||||
ECHO Ohne Parameter startet LGNTSTA Part 1 und installiert DLYSTRT.
|
|
||||||
ECHO PART2 sammelt nach dem erneuten SUPERVISOR-Login die C:-Ergebnisse ein.
|
|
||||||
ECHO Gueltiger Parameter ist PART2; part2/Part2 wird ebenfalls akzeptiert.
|
|
||||||
ECHO.
|
|
||||||
ECHO Fuer vollautomatischen Lauf vorher setzen, z.B.:
|
|
||||||
ECHO SET LGNTPWD=dein-supervisor-passwort
|
|
||||||
ECHO Danach starten:
|
|
||||||
ECHO F:\LGNTSTA
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:END
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM LGNTZIP.BAT
|
|
||||||
REM Optional packer for LGNTSTA result files.
|
|
||||||
REM Requires ZIP.EXE in PATH or current directory.
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \LGNTCMP
|
|
||||||
|
|
||||||
IF EXIST LGNTSTA.ZIP DEL LGNTSTA.ZIP
|
|
||||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
|
||||||
|
|
||||||
ECHO Creating LGNTSTA.ZIP > ZIP.LOG
|
|
||||||
ZIP -r LGNTSTA.ZIP RUN.LOG SUMMARY.TXT OUT >> ZIP.LOG
|
|
||||||
|
|
||||||
REM Cleanup generated temporary files after ZIP.
|
|
||||||
REM Keep LGNTCMP because it contains the ZIP and ZIP.LOG.
|
|
||||||
ECHO Cleaning generated temporary files... >> ZIP.LOG
|
|
||||||
DELTREE /Y C:\LGNTTMP >> ZIP.LOG
|
|
||||||
IF EXIST C:\LGNTC.BAT DEL C:\LGNTC.BAT >> ZIP.LOG
|
|
||||||
|
|
||||||
CD \
|
|
||||||
ECHO.
|
|
||||||
ECHO ZIP step finished.
|
|
||||||
ECHO Check:
|
|
||||||
ECHO F:\LGNTCMP\LGNTSTA.ZIP
|
|
||||||
ECHO F:\LGNTCMP\ZIP.LOG
|
|
||||||
ECHO.
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
# LOGIN / LOGOUT baseline test
|
|
||||||
|
|
||||||
`LGNTSTA` is an automated maintainer baseline test for Novell `LOGIN`, `LOGOUT`, and `MAP`.
|
|
||||||
|
|
||||||
This test does **not** overwrite `SYS:LOGIN`, `SYS:PUBLIC`, or `SYS:NPUBLIC`. It copies the Novell tools to a temporary local directory on `C:` and runs from there. `LOGIN` and `MAP` are copied from `SYS:NLOGIN`; `LOGOUT` is copied from `SYS:NPUBLIC`. The maintainer helper `DLYSTRT.EXE` is also copied to `C:\LGNTTMP` before it is used, so the delayed phase no longer depends on `F:` or `PUBLIC` being visible.
|
|
||||||
|
|
||||||
## Required setup
|
|
||||||
|
|
||||||
User `NOPASSUSER` must exist on `MARS` and must be able to login without a password.
|
|
||||||
|
|
||||||
For a fully automated run, the DOS tools must be built with `MAINTAINER_BUILD=ON` so `LOGIN /PWD:` and `DLYSTRT` are available.
|
|
||||||
|
|
||||||
Set the supervisor password in the DOS environment before starting:
|
|
||||||
|
|
||||||
```bat
|
|
||||||
SET LGNTPWD=your-supervisor-password
|
|
||||||
```
|
|
||||||
|
|
||||||
The password is not written to `RUN.LOG` or `HELPER.TXT`, but it is still present in the DOS environment during the test. Use this only for maintainer testing.
|
|
||||||
|
|
||||||
## Run
|
|
||||||
|
|
||||||
Start while logged in as `SUPERVISOR`:
|
|
||||||
|
|
||||||
```bat
|
|
||||||
F:\LGNTSTA
|
|
||||||
```
|
|
||||||
|
|
||||||
`LGNTSTA` prepares `C:\LGNTTMP`, copies the local helper there, and installs:
|
|
||||||
|
|
||||||
```bat
|
|
||||||
C:
|
|
||||||
CD \LGNTTMP
|
|
||||||
DLYSTRT /T:2 LGNTC.BAT
|
|
||||||
```
|
|
||||||
|
|
||||||
Then `LGNTSTA` exits after switching to `C:\LGNTTMP`. After the delay, `DLYSTRT` types `LGNTC.BAT` into the local `C:` prompt, and the helper does:
|
|
||||||
|
|
||||||
```text
|
|
||||||
LOGOUT
|
|
||||||
LOGIN NOPASSUSER
|
|
||||||
MAP
|
|
||||||
LOGOUT
|
|
||||||
LOGIN SUPERVISOR /PWD:%LGNTPWD%
|
|
||||||
F:\LGNTSTA PART2
|
|
||||||
F:\LGNTZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
If `LGNTPWD` is not set, `LGNTSTA` does not start Part 1 at all. It prints a short usage hint with the required `SET LGNTPWD=...` command and does not install `DLYSTRT`, so the test cannot accidentally log out and then stop half-way through.
|
|
||||||
|
|
||||||
## Expected output files
|
|
||||||
|
|
||||||
`F:\LGNTCMP\OUT` contains:
|
|
||||||
|
|
||||||
```text
|
|
||||||
D01_LOG.OUT LOGOUT output from initial supervisor session
|
|
||||||
D02_LGIN.OUT LOGIN NOPASSUSER output
|
|
||||||
D03_MAP.OUT MAP output after NOPASSUSER login
|
|
||||||
D04_LGOT.OUT LOGOUT output from NOPASSUSER session
|
|
||||||
D05_LGSU.OUT LOGIN SUPERVISOR /PWD output, if LGNTPWD was set
|
|
||||||
D99_HELP.OUT simulated LOGIN usage line for later comparison
|
|
||||||
HELPER.TXT helper trace
|
|
||||||
```
|
|
||||||
|
|
||||||
`D99_HELP.OUT` is intentionally produced with `ECHO`, because Novell `LOGIN /?` may not redirect help text reliably.
|
|
||||||
|
|
||||||
## Implementation note
|
|
||||||
|
|
||||||
After `LOGOUT`, the network drive `F:` disappears. Therefore `LGNTSTA` must finish before logout happens. `DLYSTRT` provides that gap by returning to DOS first. `LGNTSTA` switches to `C:\LGNTTMP` before installing it, so the delayed command is typed into a local `C:` prompt instead of an `F:` prompt.
|
|
||||||
|
|
||||||
After `LOGIN NOPASSUSER`, DOS/NetWare may change the current drive/search path. `LGNTC.BAT` therefore calls `C:\LGNTTMP\LOGIN`, `C:\LGNTTMP\MAP`, and `C:\LGNTTMP\LOGOUT` explicitly and redirects to absolute `C:\LGNTTMP\*.OUT` files.
|
|
||||||
|
|
||||||
## Parameter handling
|
|
||||||
|
|
||||||
`LGNTSTA` starts Part 1 only when called without parameters. `PART2` is accepted case-insensitively (`PART2`, `part2`, `Part2`, etc.). Any other parameter prints usage and does not start Part 1, so a typo cannot accidentally reset the test state.
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
# LOGOUT tests
|
|
||||||
|
|
||||||
`LOGOUT` is covered together with `LOGIN` in `test/login/LGNTSTA.BAT`, because a useful
|
|
||||||
logout baseline needs a controlled login/logout/login sequence.
|
|
||||||
@@ -1,178 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM MAPTSTA.BAT
|
|
||||||
REM Automated Novell MAP baseline for MARS NWE.
|
|
||||||
REM
|
|
||||||
REM LOGIN is intentionally not tested here.
|
|
||||||
REM PATH/PATHINS/PATHDEL are our own tools and are not part of this Novell MAP baseline.
|
|
||||||
REM
|
|
||||||
REM Run while already logged in and with F: mapped to SYS.
|
|
||||||
REM
|
|
||||||
REM NetWare semantics verified against real NetWare:
|
|
||||||
REM MAP G:=SYS:PUBLIC
|
|
||||||
REM sets the current path of G: to \PUBLIC, but it is NOT a fake root.
|
|
||||||
REM CD \ returns to SYS:\.
|
|
||||||
REM
|
|
||||||
REM MAP ROOT G:=SYS:PUBLIC
|
|
||||||
REM makes SYS:PUBLIC the fake root of G:.
|
|
||||||
REM CD \ stays inside SYS:PUBLIC.
|
|
||||||
REM
|
|
||||||
REM Results:
|
|
||||||
REM F:\MAPCMP\RUN.LOG
|
|
||||||
REM F:\MAPCMP\SUMMARY.TXT
|
|
||||||
REM F:\MAPCMP\OUT\*.OUT
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
REM --- Clean generated test/result directories (contents only). ---
|
|
||||||
IF EXIST MAPTEST\NUL DELTREE /Y MAPTEST\*.*
|
|
||||||
IF EXIST MAPCMP\NUL DELTREE /Y MAPCMP\*.*
|
|
||||||
|
|
||||||
IF NOT EXIST MAPTEST\NUL MD MAPTEST
|
|
||||||
IF NOT EXIST MAPTEST\PUB\NUL MD MAPTEST\PUB
|
|
||||||
IF NOT EXIST MAPCMP\NUL MD MAPCMP
|
|
||||||
IF NOT EXIST MAPCMP\OUT\NUL MD MAPCMP\OUT
|
|
||||||
|
|
||||||
IF EXIST F:\MAPCMP\RUN.LOG DEL F:\MAPCMP\RUN.LOG
|
|
||||||
IF EXIST F:\MAPCMP\SUMMARY.TXT DEL F:\MAPCMP\SUMMARY.TXT
|
|
||||||
IF EXIST F:\MAPCMP\MAPTSTA.ZIP DEL F:\MAPCMP\MAPTSTA.ZIP
|
|
||||||
IF EXIST F:\MAPCMP\ZIP.LOG DEL F:\MAPCMP\ZIP.LOG
|
|
||||||
|
|
||||||
IF EXIST F:\MAPCMP\OUT\M01_MAP.OUT DEL F:\MAPCMP\OUT\M01_MAP.OUT
|
|
||||||
IF EXIST F:\MAPCMP\OUT\M02_SUBCUR.OUT DEL F:\MAPCMP\OUT\M02_SUBCUR.OUT
|
|
||||||
IF EXIST F:\MAPCMP\OUT\M03_SUBCD.OUT DEL F:\MAPCMP\OUT\M03_SUBCD.OUT
|
|
||||||
IF EXIST F:\MAPCMP\OUT\M04_ROOTMAP.OUT DEL F:\MAPCMP\OUT\M04_ROOTMAP.OUT
|
|
||||||
IF EXIST F:\MAPCMP\OUT\M05_ROOTCD.OUT DEL F:\MAPCMP\OUT\M05_ROOTCD.OUT
|
|
||||||
IF EXIST F:\MAPCMP\OUT\M06_NPUBLIC.OUT DEL F:\MAPCMP\OUT\M06_NPUBLIC.OUT
|
|
||||||
IF EXIST F:\MAPCMP\OUT\M07_HOME.OUT DEL F:\MAPCMP\OUT\M07_HOME.OUT
|
|
||||||
IF EXIST F:\MAPCMP\OUT\M08_QUOTA.OUT DEL F:\MAPCMP\OUT\M08_QUOTA.OUT
|
|
||||||
IF EXIST F:\MAPCMP\OUT\M09_UQUOTA.OUT DEL F:\MAPCMP\OUT\M09_UQUOTA.OUT
|
|
||||||
IF EXIST F:\MAPCMP\OUT\M10_DEL.OUT DEL F:\MAPCMP\OUT\M10_DEL.OUT
|
|
||||||
IF EXIST F:\MAPCMP\OUT\M11_AFTER.OUT DEL F:\MAPCMP\OUT\M11_AFTER.OUT
|
|
||||||
IF EXIST F:\MAPCMP\OUT\M12_BAD.OUT DEL F:\MAPCMP\OUT\M12_BAD.OUT
|
|
||||||
|
|
||||||
ECHO MAPTSTA automated Novell MAP baseline > F:\MAPCMP\RUN.LOG
|
|
||||||
ECHO Run while already logged in. >> F:\MAPCMP\RUN.LOG
|
|
||||||
ECHO Date/time stamp skipped to avoid DOS prompt. >> F:\MAPCMP\RUN.LOG
|
|
||||||
ECHO. >> F:\MAPCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO MAP TEST ROOT > F:\MAPTEST\ROOT.TXT
|
|
||||||
ECHO MAP TEST PUB > F:\MAPTEST\PUB\PUB.TXT
|
|
||||||
NPUBLIC\FLAG F:\MAPTEST\ROOT.TXT N >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\FLAG F:\MAPTEST\PUB\PUB.TXT N >> F:\MAPCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === M01 current maps and volumes === >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP > F:\MAPCMP\OUT\M01_MAP.OUT
|
|
||||||
|
|
||||||
ECHO === M02 non-root subdir map G:=SYS:MAPTEST === >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP DEL G: >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP G:=SYS:MAPTEST > F:\MAPCMP\OUT\M02_SUBCUR.OUT
|
|
||||||
NPUBLIC\MAP >> F:\MAPCMP\OUT\M02_SUBCUR.OUT
|
|
||||||
G:
|
|
||||||
CD
|
|
||||||
DIR
|
|
||||||
TYPE ROOT.TXT >> F:\MAPCMP\OUT\M02_SUBCUR.OUT
|
|
||||||
DIR PUB >> F:\MAPCMP\OUT\M02_SUBCUR.OUT
|
|
||||||
TYPE PUB\PUB.TXT >> F:\MAPCMP\OUT\M02_SUBCUR.OUT
|
|
||||||
F:
|
|
||||||
|
|
||||||
ECHO === M03 non-root map after CD backslash should show SYS root === >> F:\MAPCMP\RUN.LOG
|
|
||||||
G:
|
|
||||||
CD \
|
|
||||||
CD > F:\MAPCMP\OUT\M03_SUBCD.OUT
|
|
||||||
DIR >> F:\MAPCMP\OUT\M03_SUBCD.OUT
|
|
||||||
DIR ROOT.TXT >> F:\MAPCMP\OUT\M03_SUBCD.OUT
|
|
||||||
F:
|
|
||||||
|
|
||||||
ECHO === M04 MAP ROOT G:=SYS:MAPTEST fake-root === >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP DEL G: >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP ROOT G:=SYS:MAPTEST > F:\MAPCMP\OUT\M04_ROOTMAP.OUT
|
|
||||||
NPUBLIC\MAP >> F:\MAPCMP\OUT\M04_ROOTMAP.OUT
|
|
||||||
G:
|
|
||||||
CD
|
|
||||||
DIR
|
|
||||||
TYPE ROOT.TXT >> F:\MAPCMP\OUT\M04_ROOTMAP.OUT
|
|
||||||
DIR PUB >> F:\MAPCMP\OUT\M04_ROOTMAP.OUT
|
|
||||||
TYPE PUB\PUB.TXT >> F:\MAPCMP\OUT\M04_ROOTMAP.OUT
|
|
||||||
F:
|
|
||||||
|
|
||||||
ECHO === M05 MAP ROOT after CD backslash should stay in fake-root === >> F:\MAPCMP\RUN.LOG
|
|
||||||
G:
|
|
||||||
CD \
|
|
||||||
CD > F:\MAPCMP\OUT\M05_ROOTCD.OUT
|
|
||||||
DIR >> F:\MAPCMP\OUT\M05_ROOTCD.OUT
|
|
||||||
DIR ROOT.TXT >> F:\MAPCMP\OUT\M05_ROOTCD.OUT
|
|
||||||
TYPE ROOT.TXT >> F:\MAPCMP\OUT\M05_ROOTCD.OUT
|
|
||||||
F:
|
|
||||||
|
|
||||||
ECHO === M06 MAP ROOT to SYS:NPUBLIC and find NDIR.EXE === >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP DEL G: >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP ROOT G:=SYS:NPUBLIC > F:\MAPCMP\OUT\M06_NPUBLIC.OUT
|
|
||||||
NPUBLIC\MAP >> F:\MAPCMP\OUT\M06_NPUBLIC.OUT
|
|
||||||
G:
|
|
||||||
CD \
|
|
||||||
CD >> F:\MAPCMP\OUT\M06_NPUBLIC.OUT
|
|
||||||
DIR NDIR.EXE >> F:\MAPCMP\OUT\M06_NPUBLIC.OUT
|
|
||||||
F:
|
|
||||||
|
|
||||||
ECHO === M07 map H to HOME: volume root === >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP DEL H: >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP H:=HOME: > F:\MAPCMP\OUT\M07_HOME.OUT
|
|
||||||
NPUBLIC\MAP >> F:\MAPCMP\OUT\M07_HOME.OUT
|
|
||||||
DIR H:\ >> F:\MAPCMP\OUT\M07_HOME.OUT
|
|
||||||
|
|
||||||
ECHO === M08 map I to QUOTA: volume root === >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP DEL I: >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP I:=QUOTA: > F:\MAPCMP\OUT\M08_QUOTA.OUT
|
|
||||||
NPUBLIC\MAP >> F:\MAPCMP\OUT\M08_QUOTA.OUT
|
|
||||||
DIR I:\ >> F:\MAPCMP\OUT\M08_QUOTA.OUT
|
|
||||||
|
|
||||||
ECHO === M09 map ROOT J to QUOTA:USERQUOTA fake-root === >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP DEL J: >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP ROOT J:=QUOTA:USERQUOTA > F:\MAPCMP\OUT\M09_UQUOTA.OUT
|
|
||||||
NPUBLIC\MAP >> F:\MAPCMP\OUT\M09_UQUOTA.OUT
|
|
||||||
J:
|
|
||||||
CD \
|
|
||||||
CD >> F:\MAPCMP\OUT\M09_UQUOTA.OUT
|
|
||||||
DIR >> F:\MAPCMP\OUT\M09_UQUOTA.OUT
|
|
||||||
F:
|
|
||||||
|
|
||||||
ECHO === M10 delete mapped drives G H I J === >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP DEL G: > F:\MAPCMP\OUT\M10_DEL.OUT
|
|
||||||
NPUBLIC\MAP DEL H: >> F:\MAPCMP\OUT\M10_DEL.OUT
|
|
||||||
NPUBLIC\MAP DEL I: >> F:\MAPCMP\OUT\M10_DEL.OUT
|
|
||||||
NPUBLIC\MAP DEL J: >> F:\MAPCMP\OUT\M10_DEL.OUT
|
|
||||||
NPUBLIC\MAP >> F:\MAPCMP\OUT\M10_DEL.OUT
|
|
||||||
|
|
||||||
ECHO === M11 access after delete should fail === >> F:\MAPCMP\RUN.LOG
|
|
||||||
DIR G:\ > F:\MAPCMP\OUT\M11_AFTER.OUT
|
|
||||||
DIR H:\ >> F:\MAPCMP\OUT\M11_AFTER.OUT
|
|
||||||
DIR I:\ >> F:\MAPCMP\OUT\M11_AFTER.OUT
|
|
||||||
DIR J:\ >> F:\MAPCMP\OUT\M11_AFTER.OUT
|
|
||||||
|
|
||||||
ECHO === M12 expected failure bad map target === >> F:\MAPCMP\RUN.LOG
|
|
||||||
NPUBLIC\MAP K:=SYS:NO_SUCH_DIR > F:\MAPCMP\OUT\M12_BAD.OUT
|
|
||||||
NPUBLIC\MAP DEL K: >> F:\MAPCMP\OUT\M12_BAD.OUT
|
|
||||||
|
|
||||||
ECHO === SUMMARY === > F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO MAPTSTA Novell MAP baseline finished. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO Expected: >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO - M02 non-root G:=SYS:MAPTEST starts in MAPTEST and can read ROOT.TXT. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO - M03 after CD \ on non-root map, G: is back at SYS:\ and ROOT.TXT is not found. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO - M04 MAP ROOT G:=SYS:MAPTEST can read ROOT.TXT and PUB\PUB.TXT. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO - M05 after CD \ on MAP ROOT, G: stays inside fake-root and ROOT.TXT is found. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO - M06 MAP ROOT G:=SYS:NPUBLIC finds NDIR.EXE. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO - M07 maps H to HOME:. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO - M08 maps I to QUOTA:. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO - M09 maps ROOT J to QUOTA:USERQUOTA if that directory exists. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO - M10 deletes G/H/I/J mappings. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO - M11 access after delete should fail. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO - M12 bad target should fail. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
ECHO Optional pack results with MAPTZIP.BAT. >> F:\MAPCMP\SUMMARY.TXT
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO MAPTSTA fertig.
|
|
||||||
ECHO Ergebnisse liegen in F:\MAPCMP
|
|
||||||
ECHO Optional: MAPTZIP ausfuehren.
|
|
||||||
ECHO.
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM MAPTZIP.BAT
|
|
||||||
REM Optional packer for MAPTSTA result files.
|
|
||||||
REM Requires ZIP.EXE in PATH or current directory.
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \MAPCMP
|
|
||||||
|
|
||||||
IF EXIST MAPTSTA.ZIP DEL MAPTSTA.ZIP
|
|
||||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
|
||||||
|
|
||||||
ECHO Creating MAPTSTA.ZIP > ZIP.LOG
|
|
||||||
ZIP -r MAPTSTA.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 \MAPTEST\NUL DELTREE /Y \MAPTEST >> ZIP.LOG
|
|
||||||
CD \
|
|
||||||
ECHO.
|
|
||||||
ECHO ZIP step finished.
|
|
||||||
ECHO Check:
|
|
||||||
ECHO F:\MAPCMP\MAPTSTA.ZIP
|
|
||||||
ECHO F:\MAPCMP\ZIP.LOG
|
|
||||||
ECHO.
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
# MAP automated test
|
|
||||||
|
|
||||||
`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.
|
|
||||||
|
|
||||||
## NetWare semantics
|
|
||||||
|
|
||||||
Verified against real NetWare:
|
|
||||||
|
|
||||||
```text
|
|
||||||
MAP G:=SYS:PUBLIC
|
|
||||||
```
|
|
||||||
|
|
||||||
sets the current path on `G:` to `\PUBLIC`, but it is not a fake root. `CD \`
|
|
||||||
returns to `SYS:\`.
|
|
||||||
|
|
||||||
```text
|
|
||||||
MAP ROOT G:=SYS:PUBLIC
|
|
||||||
```
|
|
||||||
|
|
||||||
sets `SYS:PUBLIC` as fake root. `CD \` stays inside `SYS:PUBLIC`.
|
|
||||||
|
|
||||||
## Run
|
|
||||||
|
|
||||||
Run while already logged in and with `F:` mapped to `SYS`.
|
|
||||||
|
|
||||||
```text
|
|
||||||
MAPTSTA
|
|
||||||
```
|
|
||||||
|
|
||||||
Optional pack:
|
|
||||||
|
|
||||||
```text
|
|
||||||
MAPTZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
Result ZIP:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\MAPCMP\MAPTSTA.ZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
Linux package with server log:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo ./mars_packtest_v3.sh maptsta 5 mario
|
|
||||||
```
|
|
||||||
|
|
||||||
## Coverage
|
|
||||||
|
|
||||||
- display current maps
|
|
||||||
- non-root subdir map `G:=SYS:MAPTEST`
|
|
||||||
- verify `CD \` returns to volume root for non-root map
|
|
||||||
- fake-root map `MAP ROOT G:=SYS:MAPTEST`
|
|
||||||
- verify `CD \` stays in fake-root for root map
|
|
||||||
- fake-root map to `SYS:NPUBLIC` and find `NDIR.EXE`
|
|
||||||
- map `H:` to `HOME:`
|
|
||||||
- map `I:` to `QUOTA:`
|
|
||||||
- fake-root map `J:` to `QUOTA:USERQUOTA`
|
|
||||||
- delete `G:`, `H:`, `I:`, `J:`
|
|
||||||
- expected failure after delete
|
|
||||||
- expected failure for bad target
|
|
||||||
@@ -1,161 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# mars_packtest.sh v3
|
|
||||||
#
|
|
||||||
# Collect a MARS NWE DOS test ZIP, append recent nw.log lines,
|
|
||||||
# copy final package to /tmp, and fix ownership/permissions.
|
|
||||||
#
|
|
||||||
# Usage:
|
|
||||||
# mars_packtest.sh <testname> [minutes] [upload_user]
|
|
||||||
#
|
|
||||||
# Example:
|
|
||||||
# sudo ./mars_packtest.sh ncptsta 5 mario
|
|
||||||
#
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
TEST_IN="${1:-}"
|
|
||||||
MINUTES="${2:-5}"
|
|
||||||
UPLOAD_USER="${3:-${SUDO_USER:-$(id -un)}}"
|
|
||||||
|
|
||||||
LOG_FILE="/var/log/mars_nwe/nw.log"
|
|
||||||
SYS_DIR="/var/mars_nwe/SYS"
|
|
||||||
OUT_DIR="/tmp"
|
|
||||||
|
|
||||||
if [ -z "$TEST_IN" ]; then
|
|
||||||
echo "Usage: $0 <testname> [minutes] [upload_user]" >&2
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
TEST="$(printf '%s' "$TEST_IN" | tr '[:lower:]' '[:upper:]')"
|
|
||||||
|
|
||||||
TEST_DIR="$TEST"
|
|
||||||
ZIP_NAME="$TEST.ZIP"
|
|
||||||
|
|
||||||
case "$TEST" in
|
|
||||||
NCPTSTA)
|
|
||||||
TEST_DIR="NCMP"
|
|
||||||
ZIP_NAME="NCPTSTA.ZIP"
|
|
||||||
;;
|
|
||||||
FILTSTN|FILPREN|FILPOSTN|FILCMPN)
|
|
||||||
TEST_DIR="TFILE"
|
|
||||||
ZIP_NAME="$TEST.ZIP"
|
|
||||||
;;
|
|
||||||
NDIRTSTN|NDIRTSTM|NDIRCMP)
|
|
||||||
TEST_DIR="TNDIR"
|
|
||||||
ZIP_NAME="$TEST.ZIP"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
SRC_ZIP="$SYS_DIR/$TEST_DIR/$ZIP_NAME"
|
|
||||||
|
|
||||||
if [ ! -f "$SRC_ZIP" ]; then
|
|
||||||
FOUND="$(find "$SYS_DIR" -maxdepth 3 -type f -iname "$TEST.zip" -print 2>/dev/null | head -n 1 || true)"
|
|
||||||
if [ -n "$FOUND" ]; then
|
|
||||||
SRC_ZIP="$FOUND"
|
|
||||||
ZIP_NAME="$(basename "$SRC_ZIP")"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$SRC_ZIP" ]; then
|
|
||||||
echo "ERROR: ZIP not found for test '$TEST_IN'." >&2
|
|
||||||
echo "Tried: $SRC_ZIP" >&2
|
|
||||||
echo "Also searched: $SYS_DIR -maxdepth 3 -iname $TEST.zip" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$LOG_FILE" ]; then
|
|
||||||
echo "ERROR: log file not found: $LOG_FILE" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
STAMP="$(date '+%Y%m%d-%H%M%S')"
|
|
||||||
WORK="/tmp/mars_packtest_${TEST}_$$"
|
|
||||||
FINAL="$OUT_DIR/${TEST}_${STAMP}_with_log.zip"
|
|
||||||
LOG_OUT="$WORK/nw_last_${MINUTES}min.log"
|
|
||||||
INFO_OUT="$WORK/package_info.txt"
|
|
||||||
|
|
||||||
mkdir -p "$WORK"
|
|
||||||
|
|
||||||
# Copy original ZIP first, so the original test result remains untouched.
|
|
||||||
cp "$SRC_ZIP" "$FINAL"
|
|
||||||
|
|
||||||
NOW_EPOCH="$(date '+%s')"
|
|
||||||
FROM_EPOCH="$((NOW_EPOCH - MINUTES * 60))"
|
|
||||||
|
|
||||||
# Compute comparable keys outside awk. This avoids running date(1) once per
|
|
||||||
# log line, which is very slow for large nw.log files.
|
|
||||||
#
|
|
||||||
# Key format:
|
|
||||||
# MMDD * 86400 + seconds_since_midnight
|
|
||||||
#
|
|
||||||
# This is intended for short windows like 5-60 minutes. It also handles
|
|
||||||
# midnight wrap for the normal "last few minutes" case.
|
|
||||||
FROM_MD="$(date -d "@$FROM_EPOCH" '+%m%d')"
|
|
||||||
FROM_SOD="$(date -d "@$FROM_EPOCH" '+%H:%M:%S' | awk -F: '{print ($1*3600)+($2*60)+$3}')"
|
|
||||||
NOW_MD="$(date -d "@$NOW_EPOCH" '+%m%d')"
|
|
||||||
NOW_SOD="$(date -d "@$NOW_EPOCH" '+%H:%M:%S' | awk -F: '{print ($1*3600)+($2*60)+$3}')"
|
|
||||||
|
|
||||||
FROM_KEY="$((10#$FROM_MD * 86400 + FROM_SOD))"
|
|
||||||
NOW_KEY="$((10#$NOW_MD * 86400 + NOW_SOD))"
|
|
||||||
|
|
||||||
# Force byte/C locale. nw.log can contain CP437/Latin-1/debug bytes.
|
|
||||||
LC_ALL=C awk -v from_key="$FROM_KEY" -v now_key="$NOW_KEY" '
|
|
||||||
{
|
|
||||||
# Log timestamp format:
|
|
||||||
# 05.26,10:52:36 ...
|
|
||||||
if (match($0, /^[0-9][0-9]\.[0-9][0-9],[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/)) {
|
|
||||||
mon = substr($0, 1, 2) + 0
|
|
||||||
day = substr($0, 4, 2) + 0
|
|
||||||
hh = substr($0, 7, 2) + 0
|
|
||||||
mm = substr($0, 10, 2) + 0
|
|
||||||
ss = substr($0, 13, 2) + 0
|
|
||||||
key = ((mon * 100) + day) * 86400 + (hh * 3600) + (mm * 60) + ss
|
|
||||||
|
|
||||||
if (from_key <= now_key) {
|
|
||||||
if (key >= from_key && key <= now_key) print
|
|
||||||
} else {
|
|
||||||
# Midnight/month/year wrap for short recent windows.
|
|
||||||
if (key >= from_key || key <= now_key) print
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
' "$LOG_FILE" > "$LOG_OUT"
|
|
||||||
|
|
||||||
{
|
|
||||||
echo "MARS NWE test package"
|
|
||||||
echo "====================="
|
|
||||||
echo
|
|
||||||
echo "Test input: $TEST_IN"
|
|
||||||
echo "Test name: $TEST"
|
|
||||||
echo "Source ZIP: $SRC_ZIP"
|
|
||||||
echo "Final ZIP: $FINAL"
|
|
||||||
echo "Log file: $LOG_FILE"
|
|
||||||
echo "Log window: last $MINUTES minute(s)"
|
|
||||||
echo "Created: $(date)"
|
|
||||||
echo "Upload user: $UPLOAD_USER"
|
|
||||||
echo "From key: $FROM_KEY"
|
|
||||||
echo "Now key: $NOW_KEY"
|
|
||||||
echo
|
|
||||||
echo "Included extra files:"
|
|
||||||
echo " nw_last_${MINUTES}min.log"
|
|
||||||
echo " package_info.txt"
|
|
||||||
} > "$INFO_OUT"
|
|
||||||
|
|
||||||
(
|
|
||||||
cd "$WORK"
|
|
||||||
zip -q "$FINAL" "$(basename "$LOG_OUT")" "$(basename "$INFO_OUT")"
|
|
||||||
)
|
|
||||||
|
|
||||||
if id "$UPLOAD_USER" >/dev/null 2>&1; then
|
|
||||||
chown "$UPLOAD_USER":"$(id -gn "$UPLOAD_USER")" "$FINAL" || true
|
|
||||||
fi
|
|
||||||
chmod 0644 "$FINAL"
|
|
||||||
|
|
||||||
rm -rf "$WORK"
|
|
||||||
|
|
||||||
echo "Created package:"
|
|
||||||
echo " $FINAL"
|
|
||||||
echo
|
|
||||||
echo "Upload as user:"
|
|
||||||
echo " $UPLOAD_USER"
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM NCPCMPN.BAT
|
|
||||||
REM Repeat comparison/show output for NCOPY test.
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === NCPCMPN: NCOPY PRE/POST Compare ===
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === K01 Source A FLAG vor/nach ===
|
|
||||||
FC F:\NCMP\PRE\SRCA.OUT F:\NCMP\POST\SRCA.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === K02 Source B FLAG vor/nach ===
|
|
||||||
FC F:\NCMP\PRE\SRCB.OUT F:\NCMP\POST\SRCB.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === K03 Source C FLAG vor/nach ===
|
|
||||||
FC F:\NCMP\PRE\SRCC.OUT F:\NCMP\POST\SRCC.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === K04 Destination NDIR ===
|
|
||||||
TYPE F:\NCMP\POST\DSTNDIR.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === K05 Destination DATES ===
|
|
||||||
TYPE F:\NCMP\POST\DSTDATE.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === K06 /S Copy SUB ===
|
|
||||||
TYPE F:\NCMP\POST\SCPYSUB.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === K07 /E Copy SUB ===
|
|
||||||
TYPE F:\NCMP\POST\ECPYSUB.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === K08 Archive SUB Output ===
|
|
||||||
TYPE F:\NCMP\POST\ARCHSUB.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
@@ -1,457 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
|
|
||||||
REM NCPTSTA.BAT
|
|
||||||
|
|
||||||
REM Automated Novell-vs-PUBLIC NCOPY comparison for MARS NWE.
|
|
||||||
|
|
||||||
REM
|
|
||||||
|
|
||||||
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 --- 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.
|
|
||||||
|
|
||||||
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\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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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. >> 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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CALL F:\NCPTSTA.BAT NOVELL
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
:RUNONE
|
|
||||||
|
|
||||||
REM %2 = tool dir, %3 = command-output directory, %4 = state-output directory
|
|
||||||
|
|
||||||
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 === SUMMARY === > F:\NCMP\SUMMARY.TXT
|
|
||||||
|
|
||||||
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,32 +0,0 @@
|
|||||||
# NCPTSTM.TST
|
|
||||||
# MARS/dosutils NCOPY regression notes/spec.
|
|
||||||
#
|
|
||||||
# Novell baseline:
|
|
||||||
# NCPTSTN.BAT
|
|
||||||
#
|
|
||||||
# Tool:
|
|
||||||
# NPUBLIC\NCOPY
|
|
||||||
#
|
|
||||||
# Test dirs:
|
|
||||||
# F:\TCOPY
|
|
||||||
# F:\NCMP
|
|
||||||
#
|
|
||||||
# Coverage:
|
|
||||||
# - normal file copy
|
|
||||||
# - overwrite with /V
|
|
||||||
# - /S subdirectory copy
|
|
||||||
# - /S /E subdirectory copy including empty dirs
|
|
||||||
# - /A archive-bit copy
|
|
||||||
# - /M archive-bit copy and clear source archive bit
|
|
||||||
# - FLAG/NDIR readback before and after
|
|
||||||
#
|
|
||||||
# Important:
|
|
||||||
# - destination directories for multi-file copies must exist first
|
|
||||||
# - /E must be used with /S
|
|
||||||
#
|
|
||||||
# Expected:
|
|
||||||
# - destination files exist and are readable
|
|
||||||
# - /S copies subdir files
|
|
||||||
# - /S /E also copies empty directories where supported
|
|
||||||
# - /M clears archive bit on copied source files
|
|
||||||
# - no unexpected server completion codes
|
|
||||||
@@ -1,262 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM NCPTSTN.BAT
|
|
||||||
REM Novell-only NCOPY baseline for MARS NWE.
|
|
||||||
REM
|
|
||||||
REM NPUBLIC = originale Novell Tools
|
|
||||||
REM PUBLIC = MARS/dosutils Tools
|
|
||||||
REM
|
|
||||||
REM Testordner:
|
|
||||||
REM F:\TCOPY
|
|
||||||
REM
|
|
||||||
REM Vergleichsdateien:
|
|
||||||
REM F:\NCMP\PRE\*.OUT
|
|
||||||
REM F:\NCMP\POST\*.OUT
|
|
||||||
REM
|
|
||||||
REM Wichtig fuer Novell NCOPY:
|
|
||||||
REM - Bei Multi-File Copy muss das Zielverzeichnis vorher existieren,
|
|
||||||
REM sonst interpretiert NCOPY das Ziel als einzelne Datei.
|
|
||||||
REM - /E ist nur zusammen mit /S gueltig.
|
|
||||||
REM - Fuer Multi-File Copy ist SRC\*.* + TO + Zielverzeichnis am klarsten.
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === NCPTSTN: Novell NCOPY Baseline ===
|
|
||||||
ECHO.
|
|
||||||
ECHO Dieses Script benutzt NPUBLIC\NCOPY und schreibt PRE/POST Vergleichsdaten.
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C00: Testordner vorbereiten ===
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
REM --- Clean generated test/result directories (contents only). ---
|
|
||||||
IF EXIST TNCOPY\NUL DELTREE /Y TNCOPY\*.*
|
|
||||||
IF NOT EXIST TCOPY MD TCOPY
|
|
||||||
IF NOT EXIST TCOPY\SRC MD TCOPY\SRC
|
|
||||||
IF NOT EXIST TCOPY\SRC\SUB MD TCOPY\SRC\SUB
|
|
||||||
IF NOT EXIST TCOPY\SRC\EMPTY MD TCOPY\SRC\EMPTY
|
|
||||||
IF NOT EXIST TCOPY\DST MD TCOPY\DST
|
|
||||||
IF NOT EXIST TCOPY\DST\SCPY MD TCOPY\DST\SCPY
|
|
||||||
IF NOT EXIST TCOPY\DST\ECPY MD TCOPY\DST\ECPY
|
|
||||||
IF NOT EXIST TCOPY\ARCH MD TCOPY\ARCH
|
|
||||||
IF NOT EXIST TCOPY\ARCH\ACPY MD TCOPY\ARCH\ACPY
|
|
||||||
IF NOT EXIST TCOPY\ARCH\MCPY MD TCOPY\ARCH\MCPY
|
|
||||||
IF NOT EXIST NCMP MD NCMP
|
|
||||||
IF NOT EXIST NCMP\PRE MD NCMP\PRE
|
|
||||||
IF NOT EXIST NCMP\POST MD NCMP\POST
|
|
||||||
ECHO NCOPY TEST A > TCOPY\SRC\A.TXT
|
|
||||||
ECHO NCOPY TEST B > TCOPY\SRC\B.TXT
|
|
||||||
ECHO NCOPY TEST C > TCOPY\SRC\SUB\C.TXT
|
|
||||||
ECHO OLD DEST FILE > TCOPY\DST\A.TXT
|
|
||||||
ECHO.
|
|
||||||
ECHO Angelegt/geprueft:
|
|
||||||
ECHO F:\TCOPY\SRC\A.TXT
|
|
||||||
ECHO F:\TCOPY\SRC\B.TXT
|
|
||||||
ECHO F:\TCOPY\SRC\SUB\C.TXT
|
|
||||||
ECHO F:\TCOPY\SRC\EMPTY
|
|
||||||
ECHO F:\TCOPY\DST\SCPY
|
|
||||||
ECHO F:\TCOPY\DST\ECPY
|
|
||||||
ECHO F:\TCOPY\ARCH\ACPY
|
|
||||||
ECHO F:\TCOPY\ARCH\MCPY
|
|
||||||
ECHO F:\NCMP\PRE / POST
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C01: Alte Vergleichsausgaben loeschen ===
|
|
||||||
DEL F:\NCMP\PRE\*.OUT
|
|
||||||
DEL F:\NCMP\POST\*.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C02: Attribute normalisieren ===
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\DST\A.TXT N
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C03: Testattribute setzen ===
|
|
||||||
ECHO A.TXT: +H +A
|
|
||||||
ECHO B.TXT: +RO +A
|
|
||||||
ECHO C.TXT: +A
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT +H +A
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT +RO +A
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT +A
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C04: PRE-Ausgaben erzeugen ===
|
|
||||||
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
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C05: PRE Source NDIR ===
|
|
||||||
TYPE F:\NCMP\PRE\SRCNDIR.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C06: PRE Source DATES ===
|
|
||||||
TYPE F:\NCMP\PRE\SRCDATE.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C10: NCOPY normal copy A.TXT nach DST ===
|
|
||||||
NPUBLIC\NCOPY F:\TCOPY\SRC\A.TXT TO F:\TCOPY\DST\A1.TXT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C11: NCOPY overwrite mit /V ===
|
|
||||||
ECHO Erwartung: NCOPY fragt ggf. wegen bestehendem Ziel.
|
|
||||||
ECHO Wenn gefragt wird, overwrite bestaetigen.
|
|
||||||
NPUBLIC\NCOPY F:\TCOPY\SRC\A.TXT TO F:\TCOPY\DST\A.TXT /V
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C12: NCOPY B.TXT normal ===
|
|
||||||
NPUBLIC\NCOPY F:\TCOPY\SRC\B.TXT TO F:\TCOPY\DST\B.TXT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C13: NCOPY Subdirs mit /S ===
|
|
||||||
ECHO Zielverzeichnis SCPY existiert bereits.
|
|
||||||
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\DST\SCPY /S
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C14: NCOPY Subdirs inklusive leer mit /S /E ===
|
|
||||||
ECHO /E ist nur zusammen mit /S gueltig.
|
|
||||||
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\DST\ECPY /S /E
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C15: NCOPY Archive-Bit Copy mit /A /S ===
|
|
||||||
ECHO Zielverzeichnis ACPY existiert bereits.
|
|
||||||
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\ARCH\ACPY /A /S
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C16: NCOPY Archive-Bit Copy mit /M /S ===
|
|
||||||
ECHO Achtung: /M sollte Archive-Bit an Quelle loeschen.
|
|
||||||
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\ARCH\MCPY /M /S
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C20: POST-Ausgaben erzeugen ===
|
|
||||||
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\A.TXT > F:\NCMP\POST\DSTA.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.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C21: Vergleich Source A FLAG vor/nach ===
|
|
||||||
FC F:\NCMP\PRE\SRCA.OUT F:\NCMP\POST\SRCA.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C22: Vergleich Source B FLAG vor/nach ===
|
|
||||||
FC F:\NCMP\PRE\SRCB.OUT F:\NCMP\POST\SRCB.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C23: Vergleich Source C FLAG vor/nach ===
|
|
||||||
FC F:\NCMP\PRE\SRCC.OUT F:\NCMP\POST\SRCC.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C24: POST Destination NDIR ===
|
|
||||||
TYPE F:\NCMP\POST\DSTNDIR.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C25: POST Destination DATES ===
|
|
||||||
TYPE F:\NCMP\POST\DSTDATE.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C26: POST /S Copy SUB ===
|
|
||||||
TYPE F:\NCMP\POST\SCPYSUB.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C27: POST /E Copy SUB inklusive leer ===
|
|
||||||
TYPE F:\NCMP\POST\ECPYSUB.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C28: POST Archive Copy SUB ===
|
|
||||||
TYPE F:\NCMP\POST\ARCHSUB.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C29: POST Source nach /M ===
|
|
||||||
TYPE F:\NCMP\POST\SRCNDIR.OUT
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === C30: Cleanup Attribute ===
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\DST\A.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\DST\A1.TXT N
|
|
||||||
NPUBLIC\FLAG F:\TCOPY\DST\B.TXT N
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
CLS
|
|
||||||
ECHO === NCPTSTN fertig ===
|
|
||||||
ECHO.
|
|
||||||
ECHO Vergleichsdateien:
|
|
||||||
ECHO F:\NCMP\PRE\*.OUT
|
|
||||||
ECHO F:\NCMP\POST\*.OUT
|
|
||||||
ECHO.
|
|
||||||
ECHO Im Serverlog pruefen:
|
|
||||||
ECHO open/create/read/write/close
|
|
||||||
ECHO overwrites
|
|
||||||
ECHO directory scans
|
|
||||||
ECHO Subdir copy /S und /S /E
|
|
||||||
ECHO Archive-bit Verhalten /A und /M
|
|
||||||
ECHO keine unerwarteten Completion Codes
|
|
||||||
ECHO.
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
@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,76 +0,0 @@
|
|||||||
# 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 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. |
|
|
||||||
|
|
||||||
## Layout
|
|
||||||
|
|
||||||
`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
|
|
||||||
F:\NCPTSTA
|
|
||||||
```
|
|
||||||
|
|
||||||
Then inspect:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\NCMP\COMPARE.LOG
|
|
||||||
F:\NCMP\SUMMARY.TXT
|
|
||||||
```
|
|
||||||
|
|
||||||
Optionally pack the results:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\NCPTZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
and upload:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\NCMP\NCPTSTA.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.
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
# NCOPY automated test
|
|
||||||
|
|
||||||
`NCPTSTA.BAT` is the automated/no-screenshot variant of the NCOPY test.
|
|
||||||
|
|
||||||
## Run
|
|
||||||
|
|
||||||
```text
|
|
||||||
NCPTSTA.BAT
|
|
||||||
```
|
|
||||||
|
|
||||||
It does not pause and redirects tool output into result files.
|
|
||||||
|
|
||||||
## Result directory
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\NCMP
|
|
||||||
```
|
|
||||||
|
|
||||||
Important files:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\NCMP\RUN.LOG
|
|
||||||
F:\NCMP\SUMMARY.TXT
|
|
||||||
F:\NCMP\PRE\*.OUT
|
|
||||||
F:\NCMP\POST\*.OUT
|
|
||||||
F:\NCMP\CMP\*.OUT
|
|
||||||
```
|
|
||||||
|
|
||||||
If `ZIP.EXE` is installed and in `PATH`, the script also creates:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\NCMP\NCPTSTA.ZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
## Notes
|
|
||||||
|
|
||||||
Classic DOS redirection normally captures stdout. Most Novell tools print their
|
|
||||||
normal output there, so this avoids screenshots and OCR for most tests.
|
|
||||||
|
|
||||||
Interactive prompts are avoided in this automated variant. The `/V` verify path
|
|
||||||
is tested by copying to a fresh destination instead of overwriting an existing
|
|
||||||
file that would prompt for confirmation.
|
|
||||||
|
|
||||||
`/M` is expected to clear the archive bit on copied source files, so PRE/POST
|
|
||||||
source flag comparisons may intentionally differ.
|
|
||||||
@@ -1,149 +0,0 @@
|
|||||||
@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,134 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM NDIRCMP4.BAT
|
|
||||||
REM NDIR Vergleichstest mit kleinerem Baum, /SHORT, /RIGHTS und Trustee-Aenderungen.
|
|
||||||
REM
|
|
||||||
REM Linux-Vorbereitung:
|
|
||||||
REM sh mkndirdata.sh /var/mars_nwe/SYS
|
|
||||||
REM
|
|
||||||
REM DOS-Annahmen:
|
|
||||||
REM NPUBLIC = Novell Tools
|
|
||||||
REM PUBLIC = unsere Tools
|
|
||||||
REM NDIRN = Novell-Vergleichsbaum
|
|
||||||
REM NDIRU = Unser Vergleichsbaum
|
|
||||||
REM
|
|
||||||
REM Hinweis:
|
|
||||||
REM Fuer lange Ausgaben nutzen wir /SHORT /CONTINUOUS.
|
|
||||||
REM Die PAUSEs sind absichtlich fuer Screenshots.
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === NDIRCMP4: kompakter NDIR Test ===
|
|
||||||
ECHO Erwartet vorhandene Testbaeume NDIRN und NDIRU.
|
|
||||||
ECHO Falls nicht vorhanden: Linux mkndirdata.sh ausfuehren.
|
|
||||||
ECHO.
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === Block 1A: Novell Basis NDIRN ===
|
|
||||||
ECHO NPUBLIC\NDIR NDIRN
|
|
||||||
NPUBLIC\NDIR NDIRN
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO === Block 1B: Unser Basis NDIRU ===
|
|
||||||
ECHO PUBLIC\NDIR NDIRU
|
|
||||||
PUBLIC\NDIR NDIRU
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === Block 2A: Novell /DATES ===
|
|
||||||
ECHO NPUBLIC\NDIR NDIRN /DATES
|
|
||||||
NPUBLIC\NDIR NDIRN /DATES
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO === Block 2B: Unser /DATES ===
|
|
||||||
ECHO PUBLIC\NDIR NDIRU /DATES
|
|
||||||
PUBLIC\NDIR NDIRU /DATES
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === Block 3A: Novell /RIGHTS ===
|
|
||||||
ECHO NPUBLIC\NDIR NDIRN /RIGHTS
|
|
||||||
NPUBLIC\NDIR NDIRN /RIGHTS
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO === Block 3B: Unser /RIGHTS ===
|
|
||||||
ECHO PUBLIC\NDIR NDIRU /RIGHTS
|
|
||||||
PUBLIC\NDIR NDIRU /RIGHTS
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === Block 4B: Unser /SUB /SHORT ===
|
|
||||||
ECHO PUBLIC\NDIR NDIRU /SUB /SHORT /CONTINUOUS
|
|
||||||
PUBLIC\NDIR NDIRU /SUB /SHORT /CONTINUOUS
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === Block 5B: Unser /SUB /RIGHTS /SHORT ===
|
|
||||||
ECHO PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
|
|
||||||
PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === Block 6B: Unser wildcard *.EXE /SUB /SHORT ===
|
|
||||||
ECHO PUBLIC\NDIR NDIRU\*.EXE /SUB /SHORT /CONTINUOUS
|
|
||||||
PUBLIC\NDIR NDIRU\*.EXE /SUB /SHORT /CONTINUOUS
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === Block 7B: Ausgangsrechte vor GRANT/REVOKE/REMOVE ===
|
|
||||||
ECHO PUBLIC\RIGHTS NDIRU\SUB1
|
|
||||||
PUBLIC\RIGHTS NDIRU\SUB1
|
|
||||||
ECHO.
|
|
||||||
ECHO PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
|
|
||||||
PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === Block 8B: GRANT eingeschraenkte Rechte auf NDIRU\SUB1 ===
|
|
||||||
ECHO PUBLIC\GRANT R F FOR NDIRU\SUB1 TO USER MARIO
|
|
||||||
PUBLIC\GRANT R F FOR NDIRU\SUB1 TO USER MARIO
|
|
||||||
ECHO.
|
|
||||||
ECHO PUBLIC\RIGHTS NDIRU\SUB1
|
|
||||||
PUBLIC\RIGHTS NDIRU\SUB1
|
|
||||||
ECHO.
|
|
||||||
ECHO PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
|
|
||||||
PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === Block 9B: GRANT mehr Rechte auf NDIRU\SUB1 ===
|
|
||||||
ECHO PUBLIC\GRANT R W C E M F A FOR NDIRU\SUB1 TO USER MARIO
|
|
||||||
PUBLIC\GRANT R W C E M F A FOR NDIRU\SUB1 TO USER MARIO
|
|
||||||
ECHO.
|
|
||||||
ECHO PUBLIC\RIGHTS NDIRU\SUB1
|
|
||||||
PUBLIC\RIGHTS NDIRU\SUB1
|
|
||||||
ECHO.
|
|
||||||
ECHO PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
|
|
||||||
PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === Block 10B: REVOKE W M von NDIRU\SUB1 ===
|
|
||||||
ECHO PUBLIC\REVOKE W M FOR NDIRU\SUB1 FROM USER MARIO
|
|
||||||
PUBLIC\REVOKE W M FOR NDIRU\SUB1 FROM USER MARIO
|
|
||||||
ECHO.
|
|
||||||
ECHO PUBLIC\RIGHTS NDIRU\SUB1
|
|
||||||
PUBLIC\RIGHTS NDIRU\SUB1
|
|
||||||
ECHO.
|
|
||||||
ECHO PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
|
|
||||||
PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === Block 11B: REMOVE Trustee von NDIRU\SUB1 ===
|
|
||||||
ECHO PUBLIC\REMOVE USER MARIO FROM NDIRU\SUB1
|
|
||||||
PUBLIC\REMOVE USER MARIO FROM NDIRU\SUB1
|
|
||||||
ECHO.
|
|
||||||
ECHO PUBLIC\RIGHTS NDIRU\SUB1
|
|
||||||
PUBLIC\RIGHTS NDIRU\SUB1
|
|
||||||
ECHO.
|
|
||||||
ECHO PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
|
|
||||||
PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
|
|
||||||
PAUSE
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO === Fertig ===
|
|
||||||
@@ -1,376 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM NDIRTSTA.BAT
|
|
||||||
REM Automated NDIR compare test for MARS NWE.
|
|
||||||
REM
|
|
||||||
REM OUT/PUBOUT:
|
|
||||||
REM Novell NPUBLIC\NDIR baseline vs PUBLIC\NDIR implementation.
|
|
||||||
REM
|
|
||||||
REM UNOV/UPUB:
|
|
||||||
REM NOPASSUSER context readback, started through DLYSTRT.
|
|
||||||
REM
|
|
||||||
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. ---
|
|
||||||
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. ---
|
|
||||||
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
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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\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 === 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 === 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 === 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 === 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 === 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 === 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 === 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 === 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 === 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 === 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 === 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 === 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 compare test finished. >> F:\NDCMP\SUMMARY.TXT
|
|
||||||
ECHO. >> 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 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,26 +0,0 @@
|
|||||||
@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,96 +0,0 @@
|
|||||||
# NDIR automated compare test
|
|
||||||
|
|
||||||
Automated compare test for `NDIR`.
|
|
||||||
|
|
||||||
## Run
|
|
||||||
|
|
||||||
```text
|
|
||||||
SET LGNTPWD=dein-supervisor-passwort
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
NDIRTSTA
|
|
||||||
```
|
|
||||||
|
|
||||||
`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\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:
|
|
||||||
|
|
||||||
```text
|
|
||||||
NDIRZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
Upload:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\NDCMP\NDIRTSTA.ZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
Then on Linux package with server log:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo ./mars_packtest_v3.sh ndirtsta 5 mario
|
|
||||||
```
|
|
||||||
|
|
||||||
The pack helper should find `/var/mars_nwe/SYS/NDCMP/NDIRTSTA.ZIP` by search.
|
|
||||||
|
|
||||||
## Test tree
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\TNDIR
|
|
||||||
```
|
|
||||||
|
|
||||||
## Coverage
|
|
||||||
|
|
||||||
- basic directory and file NDIR
|
|
||||||
- `/DATES`
|
|
||||||
- `/RIGHTS`
|
|
||||||
- attributes via `NPUBLIC\FLAG`
|
|
||||||
- filters `/H`, `/RO`, `/SY`, `/A`, `/NOT H`
|
|
||||||
- wildcards `*.TXT`, `*.DAT`
|
|
||||||
- `/FO`, `/DO`
|
|
||||||
- `/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,38 +0,0 @@
|
|||||||
# REMOVE comparison test
|
|
||||||
|
|
||||||
`RMVSTA.BAT` compares Novell `\NPUBLIC\REMOVE` against the public implementation `\PUBLIC\REMOVE`.
|
|
||||||
|
|
||||||
Run as `SUPERVISOR` or equivalent. The automatic NOPASSUSER readback needs the maintainer `LOGIN /PWD:` support and `DLYSTRT`:
|
|
||||||
|
|
||||||
```bat
|
|
||||||
SET LGNTPWD=your-supervisor-password
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
RMVSTA
|
|
||||||
```
|
|
||||||
|
|
||||||
`RMVSTA` performs a direct comparison first:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\RMVCMP\OUT Novell baseline with \NPUBLIC\REMOVE
|
|
||||||
F:\RMVCMP\PUBOUT public implementation with \PUBLIC\REMOVE
|
|
||||||
F:\RMVCMP\COMPARE.LOG
|
|
||||||
```
|
|
||||||
|
|
||||||
Then it starts `C:\RMVTMP\RMVC.BAT` through `DLYSTRT`. The helper logs in as `NOPASSUSER` and captures effective-rights readback after the public REMOVE operations:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\RMVCMP\UNOV \NPUBLIC\RIGHTS as NOPASSUSER
|
|
||||||
F:\RMVCMP\UPUB \PUBLIC\RIGHTS as NOPASSUSER
|
|
||||||
F:\RMVCMP\UCOMP.LOG
|
|
||||||
```
|
|
||||||
|
|
||||||
The matrix covers single trustee rights, mixed rights, `S`, `ALL`, `N`, file trustees with `/FILES`, and recursive removal with `/SUBDIRS`.
|
|
||||||
|
|
||||||
`RMVZIP.BAT` is intentionally manual. Run it after inspecting the results:
|
|
||||||
|
|
||||||
```bat
|
|
||||||
RMVZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
The ZIP step packages `OUT`, `PUBOUT`, `UNOV`, `UPUB`, setup logs, comparison logs, and then removes the generated `F:\RMVTEST` and `C:\RMVTMP` trees.
|
|
||||||
@@ -1,168 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM RMVC.BAT - delayed user-context REMOVE readback helper.
|
|
||||||
REM Started by RMVSTA via DLYSTRT. Runs from C:\RMVTMP.
|
|
||||||
|
|
||||||
C:
|
|
||||||
CD \RMVTMP
|
|
||||||
|
|
||||||
ECHO RMVC user-context REMOVE readback helper > HELPER.TXT
|
|
||||||
ECHO Current phase: logout supervisor, login NOPASSUSER. >> HELPER.TXT
|
|
||||||
|
|
||||||
LOGOUT > ULOG1.OUT
|
|
||||||
LOGIN NOPASSUSER > ULOGIN.OUT
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \NPUBLIC\RIGHTS.EXE GOTO HAVEF
|
|
||||||
ECHO F: not ready after NOPASSUSER login. >> C:\RMVTMP\HELPER.TXT
|
|
||||||
GOTO RELSUP
|
|
||||||
|
|
||||||
:HAVEF
|
|
||||||
ECHO Starting G10_R as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G10 > C:\RMVTMP\UNOV\G10_R.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G10 > C:\RMVTMP\UPUB\G10_R.OUT
|
|
||||||
ECHO Starting G11_W as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G11 > C:\RMVTMP\UNOV\G11_W.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G11 > C:\RMVTMP\UPUB\G11_W.OUT
|
|
||||||
ECHO Starting G12_C as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G12 > C:\RMVTMP\UNOV\G12_C.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G12 > C:\RMVTMP\UPUB\G12_C.OUT
|
|
||||||
ECHO Starting G13_E as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G13 > C:\RMVTMP\UNOV\G13_E.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G13 > C:\RMVTMP\UPUB\G13_E.OUT
|
|
||||||
ECHO Starting G14_M as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G14 > C:\RMVTMP\UNOV\G14_M.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G14 > C:\RMVTMP\UPUB\G14_M.OUT
|
|
||||||
ECHO Starting G15_F as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G15 > C:\RMVTMP\UNOV\G15_F.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G15 > C:\RMVTMP\UPUB\G15_F.OUT
|
|
||||||
ECHO Starting G16_A as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G16 > C:\RMVTMP\UNOV\G16_A.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G16 > C:\RMVTMP\UPUB\G16_A.OUT
|
|
||||||
ECHO Starting G17_S as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G17 > C:\RMVTMP\UNOV\G17_S.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G17 > C:\RMVTMP\UPUB\G17_S.OUT
|
|
||||||
ECHO Starting G20_RF as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G20 > C:\RMVTMP\UNOV\G20_RF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G20 > C:\RMVTMP\UPUB\G20_RF.OUT
|
|
||||||
ECHO Starting G21_RW as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G21 > C:\RMVTMP\UNOV\G21_RW.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G21 > C:\RMVTMP\UPUB\G21_RW.OUT
|
|
||||||
ECHO Starting G22_RWC as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G22 > C:\RMVTMP\UNOV\G22_RWC.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G22 > C:\RMVTMP\UPUB\G22_RWC.OUT
|
|
||||||
ECHO Starting G23_RWCE as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G23 > C:\RMVTMP\UNOV\G23_RWCE.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G23 > C:\RMVTMP\UPUB\G23_RWCE.OUT
|
|
||||||
ECHO Starting G24_RAL as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G24 > C:\RMVTMP\UNOV\G24_RAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G24 > C:\RMVTMP\UPUB\G24_RAL.OUT
|
|
||||||
ECHO Starting G25_SAL as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G25 > C:\RMVTMP\UNOV\G25_SAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G25 > C:\RMVTMP\UPUB\G25_SAL.OUT
|
|
||||||
ECHO Starting G26_ALL as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G26 > C:\RMVTMP\UNOV\G26_ALL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G26 > C:\RMVTMP\UPUB\G26_ALL.OUT
|
|
||||||
ECHO Starting G27_N as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G27 > C:\RMVTMP\UNOV\G27_N.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G27 > C:\RMVTMP\UPUB\G27_N.OUT
|
|
||||||
ECHO Starting G30_RE as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G30 > C:\RMVTMP\UNOV\G30_RE.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G30 > C:\RMVTMP\UPUB\G30_RE.OUT
|
|
||||||
ECHO Starting G31_RWF as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G31 > C:\RMVTMP\UNOV\G31_RWF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G31 > C:\RMVTMP\UPUB\G31_RWF.OUT
|
|
||||||
ECHO Starting G32_RCM as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G32 > C:\RMVTMP\UNOV\G32_RCM.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G32 > C:\RMVTMP\UPUB\G32_RCM.OUT
|
|
||||||
ECHO Starting G33_RFA as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G33 > C:\RMVTMP\UNOV\G33_RFA.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G33 > C:\RMVTMP\UPUB\G33_RFA.OUT
|
|
||||||
ECHO Starting G34_WCM as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G34 > C:\RMVTMP\UNOV\G34_WCM.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G34 > C:\RMVTMP\UPUB\G34_WCM.OUT
|
|
||||||
ECHO Starting G35_EMF as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G35 > C:\RMVTMP\UNOV\G35_EMF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G35 > C:\RMVTMP\UPUB\G35_EMF.OUT
|
|
||||||
ECHO Starting G36_RMF as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G36 > C:\RMVTMP\UNOV\G36_RMF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G36 > C:\RMVTMP\UPUB\G36_RMF.OUT
|
|
||||||
ECHO Starting G37_REMA as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G37 > C:\RMVTMP\UNOV\G37_REMA.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G37 > C:\RMVTMP\UPUB\G37_REMA.OUT
|
|
||||||
ECHO Starting G38_SR as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G38 > C:\RMVTMP\UNOV\G38_SR.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G38 > C:\RMVTMP\UPUB\G38_SR.OUT
|
|
||||||
ECHO Starting G39_SRF as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G39 > C:\RMVTMP\UNOV\G39_SRF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G39 > C:\RMVTMP\UPUB\G39_SRF.OUT
|
|
||||||
ECHO Starting G40_SWCM as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\G40 > C:\RMVTMP\UNOV\G40_SWCM.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\G40 > C:\RMVTMP\UPUB\G40_SWCM.OUT
|
|
||||||
ECHO Starting F10_R as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\F10\T.TXT > C:\RMVTMP\UNOV\F10_R.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\F10\T.TXT > C:\RMVTMP\UPUB\F10_R.OUT
|
|
||||||
ECHO Starting F11_RF as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\F11\T.TXT > C:\RMVTMP\UNOV\F11_RF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\F11\T.TXT > C:\RMVTMP\UPUB\F11_RF.OUT
|
|
||||||
ECHO Starting F12_RAL as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\F12\T.TXT > C:\RMVTMP\UNOV\F12_RAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\F12\T.TXT > C:\RMVTMP\UPUB\F12_RAL.OUT
|
|
||||||
ECHO Starting F13_ALL as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\F13\T.TXT > C:\RMVTMP\UNOV\F13_ALL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\F13\T.TXT > C:\RMVTMP\UPUB\F13_ALL.OUT
|
|
||||||
ECHO Starting F14_N as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\F14\T.TXT > C:\RMVTMP\UNOV\F14_N.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\F14\T.TXT > C:\RMVTMP\UPUB\F14_N.OUT
|
|
||||||
ECHO Starting F15_S as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\F15\T.TXT > C:\RMVTMP\UNOV\F15_S.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\F15\T.TXT > C:\RMVTMP\UPUB\F15_S.OUT
|
|
||||||
ECHO Starting F16_SAL as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\F16\T.TXT > C:\RMVTMP\UNOV\F16_SAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\F16\T.TXT > C:\RMVTMP\UPUB\F16_SAL.OUT
|
|
||||||
ECHO Starting S10_R as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\S10\S1 > C:\RMVTMP\UNOV\S10_R.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\S10\S1 > C:\RMVTMP\UPUB\S10_R.OUT
|
|
||||||
ECHO Starting S11_RWC as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\S11\S1 > C:\RMVTMP\UNOV\S11_RWC.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\S11\S1 > C:\RMVTMP\UPUB\S11_RWC.OUT
|
|
||||||
ECHO Starting S12_ALL as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\S12\S1 > C:\RMVTMP\UNOV\S12_ALL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\S12\S1 > C:\RMVTMP\UPUB\S12_ALL.OUT
|
|
||||||
ECHO Starting S13_SAL as NOPASSUSER... >> C:\RMVTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RMVTEST\S13\S1 > C:\RMVTMP\UNOV\S13_SAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RMVTEST\S13\S1 > C:\RMVTMP\UPUB\S13_SAL.OUT
|
|
||||||
|
|
||||||
:RELSUP
|
|
||||||
C:
|
|
||||||
CD \RMVTMP
|
|
||||||
LOGOUT > ULOG2.OUT
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \LOGIN\LOGIN.EXE GOTO HAVELOG
|
|
||||||
ECHO F:\LOGIN\LOGIN.EXE not found. >> C:\RMVTMP\HELPER.TXT
|
|
||||||
GOTO MANUAL
|
|
||||||
|
|
||||||
:HAVELOG
|
|
||||||
F:\LOGIN\LOGIN SUPERVISOR /PWD:%LGNTPWD% > C:\RMVTMP\ULGSUP.OUT
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \RMVSTA.BAT GOTO QUEUEP2
|
|
||||||
ECHO F: not restored or \RMVSTA.BAT missing. >> C:\RMVTMP\HELPER.TXT
|
|
||||||
GOTO MANUAL
|
|
||||||
|
|
||||||
:QUEUEP2
|
|
||||||
C:
|
|
||||||
CD \RMVTMP
|
|
||||||
DLYSTRT /T:2 F:\RMVSTA.BAT PART2
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:MANUAL
|
|
||||||
ECHO Please run manually after SUPERVISOR login: >> C:\RMVTMP\HELPER.TXT
|
|
||||||
ECHO F: >> C:\RMVTMP\HELPER.TXT
|
|
||||||
ECHO CD \ >> C:\RMVTMP\HELPER.TXT
|
|
||||||
ECHO RMVSTA PART2 >> C:\RMVTMP\HELPER.TXT
|
|
||||||
|
|
||||||
:END
|
|
||||||
@@ -1,595 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM RMVSTA.BAT
|
|
||||||
REM Automated REMOVE comparison test for MARS NWE.
|
|
||||||
REM
|
|
||||||
REM Direct mode:
|
|
||||||
REM OUT = Novell baseline using \NPUBLIC\REMOVE
|
|
||||||
REM PUBOUT = our implementation using \PUBLIC\REMOVE
|
|
||||||
REM
|
|
||||||
REM User-context mode:
|
|
||||||
REM REMOVE is run as SUPERVISOR against NOPASSUSER.
|
|
||||||
REM DLYSTRT starts C:\RMVTMP\RMVC.BAT after this script exits.
|
|
||||||
REM RMVC logs in as NOPASSUSER and captures effective RIGHTS output.
|
|
||||||
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: RMVSTA [PART2]
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:PART1
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
IF "%LGNTPWD%"=="" GOTO NEEDPWD
|
|
||||||
|
|
||||||
REM --- Clean generated test/result directories. ---
|
|
||||||
IF EXIST RMVTEST\*.* DELTREE /Y RMVTEST
|
|
||||||
IF EXIST RMVCMP\*.* DELTREE /Y RMVCMP
|
|
||||||
IF EXIST C:\RMVTMP\*.* DELTREE /Y C:\RMVTMP
|
|
||||||
|
|
||||||
IF NOT EXIST RMVTEST MD RMVTEST
|
|
||||||
IF NOT EXIST RMVCMP MD RMVCMP
|
|
||||||
IF NOT EXIST RMVCMP\OUT MD RMVCMP\OUT
|
|
||||||
IF NOT EXIST RMVCMP\PUBOUT MD RMVCMP\PUBOUT
|
|
||||||
IF NOT EXIST RMVCMP\SETUP MD RMVCMP\SETUP
|
|
||||||
IF NOT EXIST C:\RMVTMP MD C:\RMVTMP
|
|
||||||
IF NOT EXIST C:\RMVTMP\UNOV MD C:\RMVTMP\UNOV
|
|
||||||
IF NOT EXIST C:\RMVTMP\UPUB MD C:\RMVTMP\UPUB
|
|
||||||
IF NOT EXIST C:\RMVTMP\USETUP MD C:\RMVTMP\USETUP
|
|
||||||
|
|
||||||
ECHO RMVSTA REMOVE comparison test > F:\RMVCMP\RUN.LOG
|
|
||||||
ECHO OUT = Novell baseline with \NPUBLIC\REMOVE >> F:\RMVCMP\RUN.LOG
|
|
||||||
ECHO PUBOUT = our implementation with \PUBLIC\REMOVE >> F:\RMVCMP\RUN.LOG
|
|
||||||
ECHO User-context target: NOPASSUSER >> F:\RMVCMP\RUN.LOG
|
|
||||||
ECHO. >> F:\RMVCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO Starting D01_HELP...
|
|
||||||
\NPUBLIC\REMOVE /? > F:\RMVCMP\OUT\D01_HELP.OUT
|
|
||||||
\PUBLIC\REMOVE /? > F:\RMVCMP\PUBOUT\D01_HELP.OUT
|
|
||||||
ECHO Starting D02_NOAR...
|
|
||||||
\NPUBLIC\REMOVE > F:\RMVCMP\OUT\D02_NOAR.OUT
|
|
||||||
\PUBLIC\REMOVE > F:\RMVCMP\PUBOUT\D02_NOAR.OUT
|
|
||||||
|
|
||||||
REM --- Setup matrix directories/files. ---
|
|
||||||
IF NOT EXIST RMVTEST\G10 MD RMVTEST\G10
|
|
||||||
ECHO G10_R > F:\RMVTEST\G10\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G11 MD RMVTEST\G11
|
|
||||||
ECHO G11_W > F:\RMVTEST\G11\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G12 MD RMVTEST\G12
|
|
||||||
ECHO G12_C > F:\RMVTEST\G12\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G13 MD RMVTEST\G13
|
|
||||||
ECHO G13_E > F:\RMVTEST\G13\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G14 MD RMVTEST\G14
|
|
||||||
ECHO G14_M > F:\RMVTEST\G14\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G15 MD RMVTEST\G15
|
|
||||||
ECHO G15_F > F:\RMVTEST\G15\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G16 MD RMVTEST\G16
|
|
||||||
ECHO G16_A > F:\RMVTEST\G16\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G17 MD RMVTEST\G17
|
|
||||||
ECHO G17_S > F:\RMVTEST\G17\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G20 MD RMVTEST\G20
|
|
||||||
ECHO G20_RF > F:\RMVTEST\G20\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G21 MD RMVTEST\G21
|
|
||||||
ECHO G21_RW > F:\RMVTEST\G21\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G22 MD RMVTEST\G22
|
|
||||||
ECHO G22_RWC > F:\RMVTEST\G22\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G23 MD RMVTEST\G23
|
|
||||||
ECHO G23_RWCE > F:\RMVTEST\G23\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G24 MD RMVTEST\G24
|
|
||||||
ECHO G24_RAL > F:\RMVTEST\G24\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G25 MD RMVTEST\G25
|
|
||||||
ECHO G25_SAL > F:\RMVTEST\G25\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G26 MD RMVTEST\G26
|
|
||||||
ECHO G26_ALL > F:\RMVTEST\G26\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G27 MD RMVTEST\G27
|
|
||||||
ECHO G27_N > F:\RMVTEST\G27\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G30 MD RMVTEST\G30
|
|
||||||
ECHO G30_RE > F:\RMVTEST\G30\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G31 MD RMVTEST\G31
|
|
||||||
ECHO G31_RWF > F:\RMVTEST\G31\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G32 MD RMVTEST\G32
|
|
||||||
ECHO G32_RCM > F:\RMVTEST\G32\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G33 MD RMVTEST\G33
|
|
||||||
ECHO G33_RFA > F:\RMVTEST\G33\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G34 MD RMVTEST\G34
|
|
||||||
ECHO G34_WCM > F:\RMVTEST\G34\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G35 MD RMVTEST\G35
|
|
||||||
ECHO G35_EMF > F:\RMVTEST\G35\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G36 MD RMVTEST\G36
|
|
||||||
ECHO G36_RMF > F:\RMVTEST\G36\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G37 MD RMVTEST\G37
|
|
||||||
ECHO G37_REMA > F:\RMVTEST\G37\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G38 MD RMVTEST\G38
|
|
||||||
ECHO G38_SR > F:\RMVTEST\G38\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G39 MD RMVTEST\G39
|
|
||||||
ECHO G39_SRF > F:\RMVTEST\G39\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\G40 MD RMVTEST\G40
|
|
||||||
ECHO G40_SWCM > F:\RMVTEST\G40\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\F10 MD RMVTEST\F10
|
|
||||||
ECHO F10_R > F:\RMVTEST\F10\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\F11 MD RMVTEST\F11
|
|
||||||
ECHO F11_RF > F:\RMVTEST\F11\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\F12 MD RMVTEST\F12
|
|
||||||
ECHO F12_RAL > F:\RMVTEST\F12\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\F13 MD RMVTEST\F13
|
|
||||||
ECHO F13_ALL > F:\RMVTEST\F13\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\F14 MD RMVTEST\F14
|
|
||||||
ECHO F14_N > F:\RMVTEST\F14\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\F15 MD RMVTEST\F15
|
|
||||||
ECHO F15_S > F:\RMVTEST\F15\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\F16 MD RMVTEST\F16
|
|
||||||
ECHO F16_SAL > F:\RMVTEST\F16\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\S10 MD RMVTEST\S10
|
|
||||||
IF NOT EXIST RMVTEST\S10\S1 MD RMVTEST\S10\S1
|
|
||||||
IF NOT EXIST RMVTEST\S10\S2 MD RMVTEST\S10\S2
|
|
||||||
ECHO S10_R > F:\RMVTEST\S10\S1\T.TXT
|
|
||||||
ECHO S10_R > F:\RMVTEST\S10\S2\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\S11 MD RMVTEST\S11
|
|
||||||
IF NOT EXIST RMVTEST\S11\S1 MD RMVTEST\S11\S1
|
|
||||||
IF NOT EXIST RMVTEST\S11\S2 MD RMVTEST\S11\S2
|
|
||||||
ECHO S11_RWC > F:\RMVTEST\S11\S1\T.TXT
|
|
||||||
ECHO S11_RWC > F:\RMVTEST\S11\S2\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\S12 MD RMVTEST\S12
|
|
||||||
IF NOT EXIST RMVTEST\S12\S1 MD RMVTEST\S12\S1
|
|
||||||
IF NOT EXIST RMVTEST\S12\S2 MD RMVTEST\S12\S2
|
|
||||||
ECHO S12_ALL > F:\RMVTEST\S12\S1\T.TXT
|
|
||||||
ECHO S12_ALL > F:\RMVTEST\S12\S2\T.TXT
|
|
||||||
IF NOT EXIST RMVTEST\S13 MD RMVTEST\S13
|
|
||||||
IF NOT EXIST RMVTEST\S13\S1 MD RMVTEST\S13\S1
|
|
||||||
IF NOT EXIST RMVTEST\S13\S2 MD RMVTEST\S13\S2
|
|
||||||
ECHO S13_SAL > F:\RMVTEST\S13\S1\T.TXT
|
|
||||||
ECHO S13_SAL > F:\RMVTEST\S13\S2\T.TXT
|
|
||||||
|
|
||||||
IF NOT EXIST RMVTEST\ERR MD RMVTEST\ERR
|
|
||||||
ECHO ERR > F:\RMVTEST\ERR\T.TXT
|
|
||||||
|
|
||||||
REM --- Direct REMOVE output compare. Setup uses Novell GRANT for both sides. ---
|
|
||||||
ECHO Starting G10_R directory remove...
|
|
||||||
\NPUBLIC\GRANT R FOR F:\RMVTEST\G10 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G10_RNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G10 > F:\RMVCMP\OUT\G10_R.OUT
|
|
||||||
\NPUBLIC\GRANT R FOR F:\RMVTEST\G10 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G10_RPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G10 > F:\RMVCMP\PUBOUT\G10_R.OUT
|
|
||||||
ECHO Starting G11_W directory remove...
|
|
||||||
\NPUBLIC\GRANT W FOR F:\RMVTEST\G11 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G11_WNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G11 > F:\RMVCMP\OUT\G11_W.OUT
|
|
||||||
\NPUBLIC\GRANT W FOR F:\RMVTEST\G11 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G11_WPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G11 > F:\RMVCMP\PUBOUT\G11_W.OUT
|
|
||||||
ECHO Starting G12_C directory remove...
|
|
||||||
\NPUBLIC\GRANT C FOR F:\RMVTEST\G12 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G12_CNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G12 > F:\RMVCMP\OUT\G12_C.OUT
|
|
||||||
\NPUBLIC\GRANT C FOR F:\RMVTEST\G12 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G12_CPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G12 > F:\RMVCMP\PUBOUT\G12_C.OUT
|
|
||||||
ECHO Starting G13_E directory remove...
|
|
||||||
\NPUBLIC\GRANT E FOR F:\RMVTEST\G13 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G13_ENG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G13 > F:\RMVCMP\OUT\G13_E.OUT
|
|
||||||
\NPUBLIC\GRANT E FOR F:\RMVTEST\G13 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G13_EPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G13 > F:\RMVCMP\PUBOUT\G13_E.OUT
|
|
||||||
ECHO Starting G14_M directory remove...
|
|
||||||
\NPUBLIC\GRANT M FOR F:\RMVTEST\G14 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G14_MNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G14 > F:\RMVCMP\OUT\G14_M.OUT
|
|
||||||
\NPUBLIC\GRANT M FOR F:\RMVTEST\G14 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G14_MPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G14 > F:\RMVCMP\PUBOUT\G14_M.OUT
|
|
||||||
ECHO Starting G15_F directory remove...
|
|
||||||
\NPUBLIC\GRANT F FOR F:\RMVTEST\G15 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G15_FNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G15 > F:\RMVCMP\OUT\G15_F.OUT
|
|
||||||
\NPUBLIC\GRANT F FOR F:\RMVTEST\G15 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G15_FPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G15 > F:\RMVCMP\PUBOUT\G15_F.OUT
|
|
||||||
ECHO Starting G16_A directory remove...
|
|
||||||
\NPUBLIC\GRANT A FOR F:\RMVTEST\G16 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G16_ANG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G16 > F:\RMVCMP\OUT\G16_A.OUT
|
|
||||||
\NPUBLIC\GRANT A FOR F:\RMVTEST\G16 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G16_APG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G16 > F:\RMVCMP\PUBOUT\G16_A.OUT
|
|
||||||
ECHO Starting G17_S directory remove...
|
|
||||||
\NPUBLIC\GRANT S FOR F:\RMVTEST\G17 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G17_SNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G17 > F:\RMVCMP\OUT\G17_S.OUT
|
|
||||||
\NPUBLIC\GRANT S FOR F:\RMVTEST\G17 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G17_SPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G17 > F:\RMVCMP\PUBOUT\G17_S.OUT
|
|
||||||
ECHO Starting G20_RF directory remove...
|
|
||||||
\NPUBLIC\GRANT R F FOR F:\RMVTEST\G20 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G20_RFNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G20 > F:\RMVCMP\OUT\G20_RF.OUT
|
|
||||||
\NPUBLIC\GRANT R F FOR F:\RMVTEST\G20 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G20_RFPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G20 > F:\RMVCMP\PUBOUT\G20_RF.OUT
|
|
||||||
ECHO Starting G21_RW directory remove...
|
|
||||||
\NPUBLIC\GRANT R W FOR F:\RMVTEST\G21 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G21_RWNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G21 > F:\RMVCMP\OUT\G21_RW.OUT
|
|
||||||
\NPUBLIC\GRANT R W FOR F:\RMVTEST\G21 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G21_RWPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G21 > F:\RMVCMP\PUBOUT\G21_RW.OUT
|
|
||||||
ECHO Starting G22_RWC directory remove...
|
|
||||||
\NPUBLIC\GRANT R W C FOR F:\RMVTEST\G22 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G22_RWCNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G22 > F:\RMVCMP\OUT\G22_RWC.OUT
|
|
||||||
\NPUBLIC\GRANT R W C FOR F:\RMVTEST\G22 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G22_RWCPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G22 > F:\RMVCMP\PUBOUT\G22_RWC.OUT
|
|
||||||
ECHO Starting G23_RWCE directory remove...
|
|
||||||
\NPUBLIC\GRANT R W C E FOR F:\RMVTEST\G23 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G23_RWCENG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G23 > F:\RMVCMP\OUT\G23_RWCE.OUT
|
|
||||||
\NPUBLIC\GRANT R W C E FOR F:\RMVTEST\G23 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G23_RWCEPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G23 > F:\RMVCMP\PUBOUT\G23_RWCE.OUT
|
|
||||||
ECHO Starting G24_RAL directory remove...
|
|
||||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RMVTEST\G24 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G24_RALNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G24 > F:\RMVCMP\OUT\G24_RAL.OUT
|
|
||||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RMVTEST\G24 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G24_RALPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G24 > F:\RMVCMP\PUBOUT\G24_RAL.OUT
|
|
||||||
ECHO Starting G25_SAL directory remove...
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RMVTEST\G25 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G25_SALNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G25 > F:\RMVCMP\OUT\G25_SAL.OUT
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RMVTEST\G25 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G25_SALPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G25 > F:\RMVCMP\PUBOUT\G25_SAL.OUT
|
|
||||||
ECHO Starting G26_ALL directory remove...
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\RMVTEST\G26 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G26_ALLNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G26 > F:\RMVCMP\OUT\G26_ALL.OUT
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\RMVTEST\G26 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G26_ALLPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G26 > F:\RMVCMP\PUBOUT\G26_ALL.OUT
|
|
||||||
ECHO Starting G27_N directory remove...
|
|
||||||
\NPUBLIC\GRANT N FOR F:\RMVTEST\G27 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G27_NNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G27 > F:\RMVCMP\OUT\G27_N.OUT
|
|
||||||
\NPUBLIC\GRANT N FOR F:\RMVTEST\G27 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G27_NPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G27 > F:\RMVCMP\PUBOUT\G27_N.OUT
|
|
||||||
ECHO Starting G30_RE directory remove...
|
|
||||||
\NPUBLIC\GRANT R E FOR F:\RMVTEST\G30 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G30_RENG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G30 > F:\RMVCMP\OUT\G30_RE.OUT
|
|
||||||
\NPUBLIC\GRANT R E FOR F:\RMVTEST\G30 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G30_REPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G30 > F:\RMVCMP\PUBOUT\G30_RE.OUT
|
|
||||||
ECHO Starting G31_RWF directory remove...
|
|
||||||
\NPUBLIC\GRANT R W F FOR F:\RMVTEST\G31 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G31_RWFNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G31 > F:\RMVCMP\OUT\G31_RWF.OUT
|
|
||||||
\NPUBLIC\GRANT R W F FOR F:\RMVTEST\G31 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G31_RWFPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G31 > F:\RMVCMP\PUBOUT\G31_RWF.OUT
|
|
||||||
ECHO Starting G32_RCM directory remove...
|
|
||||||
\NPUBLIC\GRANT R C M FOR F:\RMVTEST\G32 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G32_RCMNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G32 > F:\RMVCMP\OUT\G32_RCM.OUT
|
|
||||||
\NPUBLIC\GRANT R C M FOR F:\RMVTEST\G32 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G32_RCMPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G32 > F:\RMVCMP\PUBOUT\G32_RCM.OUT
|
|
||||||
ECHO Starting G33_RFA directory remove...
|
|
||||||
\NPUBLIC\GRANT R F A FOR F:\RMVTEST\G33 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G33_RFANG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G33 > F:\RMVCMP\OUT\G33_RFA.OUT
|
|
||||||
\NPUBLIC\GRANT R F A FOR F:\RMVTEST\G33 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G33_RFAPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G33 > F:\RMVCMP\PUBOUT\G33_RFA.OUT
|
|
||||||
ECHO Starting G34_WCM directory remove...
|
|
||||||
\NPUBLIC\GRANT W C M FOR F:\RMVTEST\G34 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G34_WCMNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G34 > F:\RMVCMP\OUT\G34_WCM.OUT
|
|
||||||
\NPUBLIC\GRANT W C M FOR F:\RMVTEST\G34 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G34_WCMPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G34 > F:\RMVCMP\PUBOUT\G34_WCM.OUT
|
|
||||||
ECHO Starting G35_EMF directory remove...
|
|
||||||
\NPUBLIC\GRANT E M F FOR F:\RMVTEST\G35 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G35_EMFNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G35 > F:\RMVCMP\OUT\G35_EMF.OUT
|
|
||||||
\NPUBLIC\GRANT E M F FOR F:\RMVTEST\G35 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G35_EMFPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G35 > F:\RMVCMP\PUBOUT\G35_EMF.OUT
|
|
||||||
ECHO Starting G36_RMF directory remove...
|
|
||||||
\NPUBLIC\GRANT R W C M F FOR F:\RMVTEST\G36 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G36_RMFNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G36 > F:\RMVCMP\OUT\G36_RMF.OUT
|
|
||||||
\NPUBLIC\GRANT R W C M F FOR F:\RMVTEST\G36 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G36_RMFPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G36 > F:\RMVCMP\PUBOUT\G36_RMF.OUT
|
|
||||||
ECHO Starting G37_REMA directory remove...
|
|
||||||
\NPUBLIC\GRANT R E M A FOR F:\RMVTEST\G37 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G37_REMANG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G37 > F:\RMVCMP\OUT\G37_REMA.OUT
|
|
||||||
\NPUBLIC\GRANT R E M A FOR F:\RMVTEST\G37 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G37_REMAPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G37 > F:\RMVCMP\PUBOUT\G37_REMA.OUT
|
|
||||||
ECHO Starting G38_SR directory remove...
|
|
||||||
\NPUBLIC\GRANT S R FOR F:\RMVTEST\G38 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G38_SRNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G38 > F:\RMVCMP\OUT\G38_SR.OUT
|
|
||||||
\NPUBLIC\GRANT S R FOR F:\RMVTEST\G38 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G38_SRPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G38 > F:\RMVCMP\PUBOUT\G38_SR.OUT
|
|
||||||
ECHO Starting G39_SRF directory remove...
|
|
||||||
\NPUBLIC\GRANT S R F FOR F:\RMVTEST\G39 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G39_SRFNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G39 > F:\RMVCMP\OUT\G39_SRF.OUT
|
|
||||||
\NPUBLIC\GRANT S R F FOR F:\RMVTEST\G39 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G39_SRFPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G39 > F:\RMVCMP\PUBOUT\G39_SRF.OUT
|
|
||||||
ECHO Starting G40_SWCM directory remove...
|
|
||||||
\NPUBLIC\GRANT S W C M FOR F:\RMVTEST\G40 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G40_SWCMNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G40 > F:\RMVCMP\OUT\G40_SWCM.OUT
|
|
||||||
\NPUBLIC\GRANT S W C M FOR F:\RMVTEST\G40 TO USER NOPASSUSER > F:\RMVCMP\SETUP\G40_SWCMPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\G40 > F:\RMVCMP\PUBOUT\G40_SWCM.OUT
|
|
||||||
ECHO Starting F10_R file remove...
|
|
||||||
\NPUBLIC\GRANT R FOR F:\RMVTEST\F10\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F10_RNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F10\T.TXT /FILES > F:\RMVCMP\OUT\F10_R.OUT
|
|
||||||
\NPUBLIC\GRANT R FOR F:\RMVTEST\F10\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F10_RPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F10\T.TXT /FILES > F:\RMVCMP\PUBOUT\F10_R.OUT
|
|
||||||
ECHO Starting F11_RF file remove...
|
|
||||||
\NPUBLIC\GRANT R F FOR F:\RMVTEST\F11\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F11_RFNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F11\T.TXT /FILES > F:\RMVCMP\OUT\F11_RF.OUT
|
|
||||||
\NPUBLIC\GRANT R F FOR F:\RMVTEST\F11\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F11_RFPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F11\T.TXT /FILES > F:\RMVCMP\PUBOUT\F11_RF.OUT
|
|
||||||
ECHO Starting F12_RAL file remove...
|
|
||||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RMVTEST\F12\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F12_RALNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F12\T.TXT /FILES > F:\RMVCMP\OUT\F12_RAL.OUT
|
|
||||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RMVTEST\F12\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F12_RALPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F12\T.TXT /FILES > F:\RMVCMP\PUBOUT\F12_RAL.OUT
|
|
||||||
ECHO Starting F13_ALL file remove...
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\RMVTEST\F13\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F13_ALLNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F13\T.TXT /FILES > F:\RMVCMP\OUT\F13_ALL.OUT
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\RMVTEST\F13\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F13_ALLPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F13\T.TXT /FILES > F:\RMVCMP\PUBOUT\F13_ALL.OUT
|
|
||||||
ECHO Starting F14_N file remove...
|
|
||||||
\NPUBLIC\GRANT N FOR F:\RMVTEST\F14\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F14_NNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F14\T.TXT /FILES > F:\RMVCMP\OUT\F14_N.OUT
|
|
||||||
\NPUBLIC\GRANT N FOR F:\RMVTEST\F14\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F14_NPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F14\T.TXT /FILES > F:\RMVCMP\PUBOUT\F14_N.OUT
|
|
||||||
ECHO Starting F15_S file remove...
|
|
||||||
\NPUBLIC\GRANT S FOR F:\RMVTEST\F15\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F15_SNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F15\T.TXT /FILES > F:\RMVCMP\OUT\F15_S.OUT
|
|
||||||
\NPUBLIC\GRANT S FOR F:\RMVTEST\F15\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F15_SPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F15\T.TXT /FILES > F:\RMVCMP\PUBOUT\F15_S.OUT
|
|
||||||
ECHO Starting F16_SAL file remove...
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RMVTEST\F16\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F16_SALNG.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F16\T.TXT /FILES > F:\RMVCMP\OUT\F16_SAL.OUT
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RMVTEST\F16\T.TXT TO USER NOPASSUSER /FILES > F:\RMVCMP\SETUP\F16_SALPG.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\F16\T.TXT /FILES > F:\RMVCMP\PUBOUT\F16_SAL.OUT
|
|
||||||
ECHO Starting S10_R subdirs remove...
|
|
||||||
\NPUBLIC\GRANT R FOR F:\RMVTEST\S10 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S10_RNR.OUT
|
|
||||||
\NPUBLIC\GRANT R FOR F:\RMVTEST\S10\S1 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S10_RN1.OUT
|
|
||||||
\NPUBLIC\GRANT R FOR F:\RMVTEST\S10\S2 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S10_RN2.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\S10 /SUBDIRS > F:\RMVCMP\OUT\S10_R.OUT
|
|
||||||
\NPUBLIC\GRANT R FOR F:\RMVTEST\S10 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S10_RPR.OUT
|
|
||||||
\NPUBLIC\GRANT R FOR F:\RMVTEST\S10\S1 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S10_RP1.OUT
|
|
||||||
\NPUBLIC\GRANT R FOR F:\RMVTEST\S10\S2 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S10_RP2.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\S10 /SUBDIRS > F:\RMVCMP\PUBOUT\S10_R.OUT
|
|
||||||
ECHO Starting S11_RWC subdirs remove...
|
|
||||||
\NPUBLIC\GRANT R W C FOR F:\RMVTEST\S11 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S11_RWCNR.OUT
|
|
||||||
\NPUBLIC\GRANT R W C FOR F:\RMVTEST\S11\S1 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S11_RWCN1.OUT
|
|
||||||
\NPUBLIC\GRANT R W C FOR F:\RMVTEST\S11\S2 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S11_RWCN2.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\S11 /SUBDIRS > F:\RMVCMP\OUT\S11_RWC.OUT
|
|
||||||
\NPUBLIC\GRANT R W C FOR F:\RMVTEST\S11 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S11_RWCPR.OUT
|
|
||||||
\NPUBLIC\GRANT R W C FOR F:\RMVTEST\S11\S1 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S11_RWCP1.OUT
|
|
||||||
\NPUBLIC\GRANT R W C FOR F:\RMVTEST\S11\S2 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S11_RWCP2.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\S11 /SUBDIRS > F:\RMVCMP\PUBOUT\S11_RWC.OUT
|
|
||||||
ECHO Starting S12_ALL subdirs remove...
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\RMVTEST\S12 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S12_ALLNR.OUT
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\RMVTEST\S12\S1 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S12_ALLN1.OUT
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\RMVTEST\S12\S2 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S12_ALLN2.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\S12 /SUBDIRS > F:\RMVCMP\OUT\S12_ALL.OUT
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\RMVTEST\S12 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S12_ALLPR.OUT
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\RMVTEST\S12\S1 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S12_ALLP1.OUT
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\RMVTEST\S12\S2 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S12_ALLP2.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\S12 /SUBDIRS > F:\RMVCMP\PUBOUT\S12_ALL.OUT
|
|
||||||
ECHO Starting S13_SAL subdirs remove...
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RMVTEST\S13 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S13_SALNR.OUT
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RMVTEST\S13\S1 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S13_SALN1.OUT
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RMVTEST\S13\S2 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S13_SALN2.OUT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\S13 /SUBDIRS > F:\RMVCMP\OUT\S13_SAL.OUT
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RMVTEST\S13 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S13_SALPR.OUT
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RMVTEST\S13\S1 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S13_SALP1.OUT
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RMVTEST\S13\S2 TO USER NOPASSUSER > F:\RMVCMP\SETUP\S13_SALP2.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\S13 /SUBDIRS > F:\RMVCMP\PUBOUT\S13_SAL.OUT
|
|
||||||
|
|
||||||
ECHO Starting E90_NOTR no trustee...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\ERR > F:\RMVCMP\OUT\E90_NOTR.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\ERR > F:\RMVCMP\PUBOUT\E90_NOTR.OUT
|
|
||||||
ECHO Starting E91_MUSR missing user...
|
|
||||||
\NPUBLIC\REMOVE USER NO_SUCH_USER FROM F:\RMVTEST\ERR > F:\RMVCMP\OUT\E91_MUSR.OUT
|
|
||||||
\PUBLIC\REMOVE USER NO_SUCH_USER FROM F:\RMVTEST\ERR > F:\RMVCMP\PUBOUT\E91_MUSR.OUT
|
|
||||||
ECHO Starting E92_MISD missing path...
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\MISS > F:\RMVCMP\OUT\E92_MISD.OUT
|
|
||||||
\PUBLIC\REMOVE USER NOPASSUSER FROM F:\RMVTEST\MISS > F:\RMVCMP\PUBOUT\E92_MISD.OUT
|
|
||||||
ECHO Starting E93_BADD bad grammar...
|
|
||||||
\NPUBLIC\REMOVE USER FROM F:\RMVTEST\ERR > F:\RMVCMP\OUT\E93_BADD.OUT
|
|
||||||
\PUBLIC\REMOVE USER FROM F:\RMVTEST\ERR > F:\RMVCMP\PUBOUT\E93_BADD.OUT
|
|
||||||
|
|
||||||
ECHO === Direct compare OUT vs PUBOUT === > F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing D01_HELP >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\D01_HELP.OUT F:\RMVCMP\PUBOUT\D01_HELP.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing D02_NOAR >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\D02_NOAR.OUT F:\RMVCMP\PUBOUT\D02_NOAR.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G10_R >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G10_R.OUT F:\RMVCMP\PUBOUT\G10_R.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G11_W >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G11_W.OUT F:\RMVCMP\PUBOUT\G11_W.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G12_C >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G12_C.OUT F:\RMVCMP\PUBOUT\G12_C.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G13_E >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G13_E.OUT F:\RMVCMP\PUBOUT\G13_E.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G14_M >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G14_M.OUT F:\RMVCMP\PUBOUT\G14_M.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G15_F >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G15_F.OUT F:\RMVCMP\PUBOUT\G15_F.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G16_A >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G16_A.OUT F:\RMVCMP\PUBOUT\G16_A.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G17_S >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G17_S.OUT F:\RMVCMP\PUBOUT\G17_S.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G20_RF >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G20_RF.OUT F:\RMVCMP\PUBOUT\G20_RF.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G21_RW >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G21_RW.OUT F:\RMVCMP\PUBOUT\G21_RW.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G22_RWC >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G22_RWC.OUT F:\RMVCMP\PUBOUT\G22_RWC.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G23_RWCE >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G23_RWCE.OUT F:\RMVCMP\PUBOUT\G23_RWCE.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G24_RAL >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G24_RAL.OUT F:\RMVCMP\PUBOUT\G24_RAL.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G25_SAL >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G25_SAL.OUT F:\RMVCMP\PUBOUT\G25_SAL.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G26_ALL >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G26_ALL.OUT F:\RMVCMP\PUBOUT\G26_ALL.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G27_N >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G27_N.OUT F:\RMVCMP\PUBOUT\G27_N.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G30_RE >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G30_RE.OUT F:\RMVCMP\PUBOUT\G30_RE.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G31_RWF >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G31_RWF.OUT F:\RMVCMP\PUBOUT\G31_RWF.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G32_RCM >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G32_RCM.OUT F:\RMVCMP\PUBOUT\G32_RCM.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G33_RFA >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G33_RFA.OUT F:\RMVCMP\PUBOUT\G33_RFA.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G34_WCM >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G34_WCM.OUT F:\RMVCMP\PUBOUT\G34_WCM.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G35_EMF >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G35_EMF.OUT F:\RMVCMP\PUBOUT\G35_EMF.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G36_RMF >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G36_RMF.OUT F:\RMVCMP\PUBOUT\G36_RMF.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G37_REMA >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G37_REMA.OUT F:\RMVCMP\PUBOUT\G37_REMA.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G38_SR >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G38_SR.OUT F:\RMVCMP\PUBOUT\G38_SR.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G39_SRF >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G39_SRF.OUT F:\RMVCMP\PUBOUT\G39_SRF.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing G40_SWCM >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\G40_SWCM.OUT F:\RMVCMP\PUBOUT\G40_SWCM.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing F10_R >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\F10_R.OUT F:\RMVCMP\PUBOUT\F10_R.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing F11_RF >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\F11_RF.OUT F:\RMVCMP\PUBOUT\F11_RF.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing F12_RAL >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\F12_RAL.OUT F:\RMVCMP\PUBOUT\F12_RAL.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing F13_ALL >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\F13_ALL.OUT F:\RMVCMP\PUBOUT\F13_ALL.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing F14_N >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\F14_N.OUT F:\RMVCMP\PUBOUT\F14_N.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing F15_S >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\F15_S.OUT F:\RMVCMP\PUBOUT\F15_S.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing F16_SAL >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\F16_SAL.OUT F:\RMVCMP\PUBOUT\F16_SAL.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing S10_R >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\S10_R.OUT F:\RMVCMP\PUBOUT\S10_R.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing S11_RWC >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\S11_RWC.OUT F:\RMVCMP\PUBOUT\S11_RWC.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing S12_ALL >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\S12_ALL.OUT F:\RMVCMP\PUBOUT\S12_ALL.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing S13_SAL >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\S13_SAL.OUT F:\RMVCMP\PUBOUT\S13_SAL.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing E90_NOTR >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\E90_NOTR.OUT F:\RMVCMP\PUBOUT\E90_NOTR.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing E91_MUSR >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\E91_MUSR.OUT F:\RMVCMP\PUBOUT\E91_MUSR.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing E92_MISD >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\E92_MISD.OUT F:\RMVCMP\PUBOUT\E92_MISD.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
ECHO Comparing E93_BADD >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
FC F:\RMVCMP\OUT\E93_BADD.OUT F:\RMVCMP\PUBOUT\E93_BADD.OUT >> F:\RMVCMP\COMPARE.LOG
|
|
||||||
|
|
||||||
REM --- Prepare delayed user-context readback. ---
|
|
||||||
COPY F:\test\remove\RMVC.BAT C:\RMVTMP\RMVC.BAT > NUL
|
|
||||||
IF EXIST F:\RMVC.BAT COPY F:\RMVC.BAT C:\RMVTMP\RMVC.BAT > NUL
|
|
||||||
IF EXIST \PUBLIC\DLYSTRT.EXE COPY \PUBLIC\DLYSTRT.EXE C:\RMVTMP > NUL
|
|
||||||
IF EXIST C:\RMVTMP\DLYSTRT.EXE GOTO HAVEDLY
|
|
||||||
ECHO ERROR: DLYSTRT.EXE not found. >> F:\RMVCMP\RUN.LOG
|
|
||||||
ECHO ERROR: DLYSTRT.EXE not found.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:HAVEDLY
|
|
||||||
C:
|
|
||||||
CD \RMVTMP
|
|
||||||
DLYSTRT /T:2 RMVC.BAT
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
ECHO RMVSTA Part1 finished. Waiting for delayed NOPASSUSER readback.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:PART2
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF NOT EXIST RMVCMP MD RMVCMP
|
|
||||||
IF NOT EXIST RMVCMP\UNOV MD RMVCMP\UNOV
|
|
||||||
IF NOT EXIST RMVCMP\UPUB MD RMVCMP\UPUB
|
|
||||||
IF NOT EXIST RMVCMP\USETUP MD RMVCMP\USETUP
|
|
||||||
|
|
||||||
IF EXIST C:\RMVTMP\UNOV\*.* COPY C:\RMVTMP\UNOV\*.* F:\RMVCMP\UNOV > NUL
|
|
||||||
IF EXIST C:\RMVTMP\UPUB\*.* COPY C:\RMVTMP\UPUB\*.* F:\RMVCMP\UPUB > NUL
|
|
||||||
IF EXIST C:\RMVTMP\USETUP\*.* COPY C:\RMVTMP\USETUP\*.* F:\RMVCMP\USETUP > NUL
|
|
||||||
IF EXIST C:\RMVTMP\HELPER.TXT COPY C:\RMVTMP\HELPER.TXT F:\RMVCMP\HELPER.TXT > NUL
|
|
||||||
IF EXIST C:\RMVTMP\ULOG1.OUT COPY C:\RMVTMP\ULOG1.OUT F:\RMVCMP\ULOG1.OUT > NUL
|
|
||||||
IF EXIST C:\RMVTMP\ULOGIN.OUT COPY C:\RMVTMP\ULOGIN.OUT F:\RMVCMP\ULOGIN.OUT > NUL
|
|
||||||
IF EXIST C:\RMVTMP\ULOG2.OUT COPY C:\RMVTMP\ULOG2.OUT F:\RMVCMP\ULOG2.OUT > NUL
|
|
||||||
IF EXIST C:\RMVTMP\ULGSUP.OUT COPY C:\RMVTMP\ULGSUP.OUT F:\RMVCMP\ULGSUP.OUT > NUL
|
|
||||||
|
|
||||||
ECHO === User-context compare UNOV vs UPUB === > F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G10_R >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G10_R.OUT F:\RMVCMP\UPUB\G10_R.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G11_W >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G11_W.OUT F:\RMVCMP\UPUB\G11_W.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G12_C >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G12_C.OUT F:\RMVCMP\UPUB\G12_C.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G13_E >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G13_E.OUT F:\RMVCMP\UPUB\G13_E.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G14_M >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G14_M.OUT F:\RMVCMP\UPUB\G14_M.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G15_F >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G15_F.OUT F:\RMVCMP\UPUB\G15_F.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G16_A >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G16_A.OUT F:\RMVCMP\UPUB\G16_A.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G17_S >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G17_S.OUT F:\RMVCMP\UPUB\G17_S.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G20_RF >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G20_RF.OUT F:\RMVCMP\UPUB\G20_RF.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G21_RW >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G21_RW.OUT F:\RMVCMP\UPUB\G21_RW.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G22_RWC >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G22_RWC.OUT F:\RMVCMP\UPUB\G22_RWC.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G23_RWCE >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G23_RWCE.OUT F:\RMVCMP\UPUB\G23_RWCE.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G24_RAL >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G24_RAL.OUT F:\RMVCMP\UPUB\G24_RAL.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G25_SAL >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G25_SAL.OUT F:\RMVCMP\UPUB\G25_SAL.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G26_ALL >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G26_ALL.OUT F:\RMVCMP\UPUB\G26_ALL.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G27_N >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G27_N.OUT F:\RMVCMP\UPUB\G27_N.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G30_RE >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G30_RE.OUT F:\RMVCMP\UPUB\G30_RE.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G31_RWF >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G31_RWF.OUT F:\RMVCMP\UPUB\G31_RWF.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G32_RCM >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G32_RCM.OUT F:\RMVCMP\UPUB\G32_RCM.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G33_RFA >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G33_RFA.OUT F:\RMVCMP\UPUB\G33_RFA.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G34_WCM >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G34_WCM.OUT F:\RMVCMP\UPUB\G34_WCM.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G35_EMF >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G35_EMF.OUT F:\RMVCMP\UPUB\G35_EMF.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G36_RMF >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G36_RMF.OUT F:\RMVCMP\UPUB\G36_RMF.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G37_REMA >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G37_REMA.OUT F:\RMVCMP\UPUB\G37_REMA.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G38_SR >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G38_SR.OUT F:\RMVCMP\UPUB\G38_SR.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G39_SRF >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G39_SRF.OUT F:\RMVCMP\UPUB\G39_SRF.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing G40_SWCM >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\G40_SWCM.OUT F:\RMVCMP\UPUB\G40_SWCM.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing F10_R >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\F10_R.OUT F:\RMVCMP\UPUB\F10_R.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing F11_RF >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\F11_RF.OUT F:\RMVCMP\UPUB\F11_RF.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing F12_RAL >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\F12_RAL.OUT F:\RMVCMP\UPUB\F12_RAL.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing F13_ALL >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\F13_ALL.OUT F:\RMVCMP\UPUB\F13_ALL.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing F14_N >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\F14_N.OUT F:\RMVCMP\UPUB\F14_N.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing F15_S >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\F15_S.OUT F:\RMVCMP\UPUB\F15_S.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing F16_SAL >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\F16_SAL.OUT F:\RMVCMP\UPUB\F16_SAL.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing S10_R >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\S10_R.OUT F:\RMVCMP\UPUB\S10_R.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing S11_RWC >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\S11_RWC.OUT F:\RMVCMP\UPUB\S11_RWC.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing S12_ALL >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\S12_ALL.OUT F:\RMVCMP\UPUB\S12_ALL.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
ECHO Comparing S13_SAL >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
FC F:\RMVCMP\UNOV\S13_SAL.OUT F:\RMVCMP\UPUB\S13_SAL.OUT >> F:\RMVCMP\UCOMP.LOG
|
|
||||||
|
|
||||||
ECHO === SUMMARY === > F:\RMVCMP\SUMMARY.TXT
|
|
||||||
ECHO RMVSTA REMOVE comparison finished. >> F:\RMVCMP\SUMMARY.TXT
|
|
||||||
ECHO. >> F:\RMVCMP\SUMMARY.TXT
|
|
||||||
ECHO Direct mode compares NPUBLIC REMOVE against PUBLIC REMOVE. >> F:\RMVCMP\SUMMARY.TXT
|
|
||||||
ECHO User-context mode logs in as NOPASSUSER and compares RIGHTS output after PUBLIC REMOVE. >> F:\RMVCMP\SUMMARY.TXT
|
|
||||||
ECHO Optional: RMVZIP ausfuehren. >> F:\RMVCMP\SUMMARY.TXT
|
|
||||||
|
|
||||||
ECHO RMVSTA PART2 fertig.
|
|
||||||
ECHO Ergebnisse liegen in F:\RMVCMP
|
|
||||||
ECHO Optional: RMVZIP ausfuehren.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:NEEDPWD
|
|
||||||
ECHO ERROR: LGNTPWD ist nicht gesetzt.
|
|
||||||
ECHO Fuer den automatischen REMOVE/NOPASSUSER-Test zuerst setzen, z.B.:
|
|
||||||
ECHO SET LGNTPWD=dein-supervisor-passwort
|
|
||||||
ECHO Danach starten:
|
|
||||||
ECHO F:\RMVSTA
|
|
||||||
ECHO Es wurde kein DLYSTRT installiert und kein Test gestartet.
|
|
||||||
|
|
||||||
:END
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM RMVZIP.BAT
|
|
||||||
REM Optional packer for RMVSTA result files.
|
|
||||||
REM Requires ZIP.EXE in PATH or current directory.
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \RMVCMP
|
|
||||||
|
|
||||||
IF EXIST RMVSTA.ZIP DEL RMVSTA.ZIP
|
|
||||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
|
||||||
|
|
||||||
ECHO Creating RMVSTA.ZIP > ZIP.LOG
|
|
||||||
ZIP -r RMVSTA.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 \RMVTEST\NUL DELTREE /Y \RMVTEST >> ZIP.LOG
|
|
||||||
IF EXIST C:\RMVTMP\NUL DELTREE /Y C:\RMVTMP >> ZIP.LOG
|
|
||||||
CD \
|
|
||||||
ECHO.
|
|
||||||
ECHO ZIP step finished.
|
|
||||||
ECHO Check:
|
|
||||||
ECHO F:\RMVCMP\RMVSTA.ZIP
|
|
||||||
ECHO F:\RMVCMP\ZIP.LOG
|
|
||||||
ECHO.
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
# Rename / move / delete tests
|
|
||||||
|
|
||||||
Automated DOS-command baseline over the NetWare redirector.
|
|
||||||
|
|
||||||
## Run
|
|
||||||
|
|
||||||
```text
|
|
||||||
RMTSTA
|
|
||||||
```
|
|
||||||
|
|
||||||
Results:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\RCMP\RUN.LOG
|
|
||||||
F:\RCMP\SUMMARY.TXT
|
|
||||||
F:\RCMP\PRE\*.OUT
|
|
||||||
F:\RCMP\POST\*.OUT
|
|
||||||
F:\RCMP\CMP\*.OUT
|
|
||||||
```
|
|
||||||
|
|
||||||
Optional pack:
|
|
||||||
|
|
||||||
```text
|
|
||||||
RMTZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
Upload:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\RCMP\RMTSTA.ZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
Then on Linux package with server log:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo ./mars_packtest_v3.sh rmtsta 5 mario
|
|
||||||
```
|
|
||||||
|
|
||||||
## Coverage
|
|
||||||
|
|
||||||
- file rename in same directory using `REN`
|
|
||||||
- expected failure: rename to existing target
|
|
||||||
- move-like file operation via copy+delete across directories
|
|
||||||
- directory rename using `MOVE`
|
|
||||||
- file delete
|
|
||||||
- empty directory remove
|
|
||||||
- expected failure: remove non-empty directory
|
|
||||||
|
|
||||||
## Syntax note
|
|
||||||
|
|
||||||
This client rejects directory rename with `REN`, but accepts directory rename with:
|
|
||||||
|
|
||||||
```text
|
|
||||||
MOVE olddir newdir
|
|
||||||
```
|
|
||||||
@@ -1,188 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM RMTSTA.BAT
|
|
||||||
REM Automated file/directory rename, move, delete baseline for MARS NWE.
|
|
||||||
REM
|
|
||||||
REM Uses DOS commands over the NetWare redirector:
|
|
||||||
REM MD, REN, MOVE, COPY, DEL, RD
|
|
||||||
REM
|
|
||||||
REM Notes:
|
|
||||||
REM - File rename uses REN.
|
|
||||||
REM - Directory rename uses MOVE, because this client rejects REN on dirs.
|
|
||||||
REM - Some DOS/Novell messages may still appear on screen even when
|
|
||||||
REM stdout is redirected. Result files are in F:\RCMP.
|
|
||||||
REM
|
|
||||||
REM Results:
|
|
||||||
REM F:\RCMP\RUN.LOG
|
|
||||||
REM F:\RCMP\SUMMARY.TXT
|
|
||||||
REM F:\RCMP\PRE\*.OUT
|
|
||||||
REM F:\RCMP\POST\*.OUT
|
|
||||||
REM F:\RCMP\CMP\*.OUT
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
REM --- Clean generated test/result directories (contents only). ---
|
|
||||||
IF EXIST RMTTEST\NUL DELTREE /Y RMTTEST\*.*
|
|
||||||
IF EXIST RMTCMP\NUL DELTREE /Y RMTCMP\*.*
|
|
||||||
|
|
||||||
REM --- Directory setup ---
|
|
||||||
IF NOT EXIST TRMOVE\NUL MD TRMOVE
|
|
||||||
IF NOT EXIST TRMOVE\SRC\NUL MD TRMOVE\SRC
|
|
||||||
IF NOT EXIST TRMOVE\SRC\SUB\NUL MD TRMOVE\SRC\SUB
|
|
||||||
IF NOT EXIST TRMOVE\DST\NUL MD TRMOVE\DST
|
|
||||||
IF NOT EXIST TRMOVE\DFILE\NUL MD TRMOVE\DFILE
|
|
||||||
IF NOT EXIST TRMOVE\NEMPTY\NUL MD TRMOVE\NEMPTY
|
|
||||||
IF NOT EXIST RCMP\NUL MD RCMP
|
|
||||||
IF NOT EXIST RCMP\PRE\NUL MD RCMP\PRE
|
|
||||||
IF NOT EXIST RCMP\POST\NUL MD RCMP\POST
|
|
||||||
IF NOT EXIST RCMP\CMP\NUL MD RCMP\CMP
|
|
||||||
|
|
||||||
REM --- Clean result files ---
|
|
||||||
IF EXIST F:\RCMP\RUN.LOG DEL F:\RCMP\RUN.LOG
|
|
||||||
IF EXIST F:\RCMP\SUMMARY.TXT DEL F:\RCMP\SUMMARY.TXT
|
|
||||||
IF EXIST F:\RCMP\ZIP.LOG DEL F:\RCMP\ZIP.LOG
|
|
||||||
IF EXIST F:\RCMP\RMTSTA.ZIP DEL F:\RCMP\RMTSTA.ZIP
|
|
||||||
|
|
||||||
IF EXIST F:\RCMP\PRE\ROOT.OUT DEL F:\RCMP\PRE\ROOT.OUT
|
|
||||||
IF EXIST F:\RCMP\PRE\SRC.OUT DEL F:\RCMP\PRE\SRC.OUT
|
|
||||||
IF EXIST F:\RCMP\PRE\SUB.OUT DEL F:\RCMP\PRE\SUB.OUT
|
|
||||||
IF EXIST F:\RCMP\PRE\DST.OUT DEL F:\RCMP\PRE\DST.OUT
|
|
||||||
IF EXIST F:\RCMP\PRE\DFILE.OUT DEL F:\RCMP\PRE\DFILE.OUT
|
|
||||||
IF EXIST F:\RCMP\PRE\DATES.OUT DEL F:\RCMP\PRE\DATES.OUT
|
|
||||||
IF EXIST F:\RCMP\POST\ROOT.OUT DEL F:\RCMP\POST\ROOT.OUT
|
|
||||||
IF EXIST F:\RCMP\POST\SRC.OUT DEL F:\RCMP\POST\SRC.OUT
|
|
||||||
IF EXIST F:\RCMP\POST\SUB.OUT DEL F:\RCMP\POST\SUB.OUT
|
|
||||||
IF EXIST F:\RCMP\POST\DST.OUT DEL F:\RCMP\POST\DST.OUT
|
|
||||||
IF EXIST F:\RCMP\POST\DFILE.OUT DEL F:\RCMP\POST\DFILE.OUT
|
|
||||||
IF EXIST F:\RCMP\POST\NEMPTY.OUT DEL F:\RCMP\POST\NEMPTY.OUT
|
|
||||||
IF EXIST F:\RCMP\POST\DATES.OUT DEL F:\RCMP\POST\DATES.OUT
|
|
||||||
IF EXIST F:\RCMP\POST\A2.OUT DEL F:\RCMP\POST\A2.OUT
|
|
||||||
IF EXIST F:\RCMP\POST\MOVEDB.OUT DEL F:\RCMP\POST\MOVEDB.OUT
|
|
||||||
IF EXIST F:\RCMP\CMP\ROOT.OUT DEL F:\RCMP\CMP\ROOT.OUT
|
|
||||||
IF EXIST F:\RCMP\CMP\SRC.OUT DEL F:\RCMP\CMP\SRC.OUT
|
|
||||||
IF EXIST F:\RCMP\CMP\SUB.OUT DEL F:\RCMP\CMP\SUB.OUT
|
|
||||||
IF EXIST F:\RCMP\CMP\DST.OUT DEL F:\RCMP\CMP\DST.OUT
|
|
||||||
IF EXIST F:\RCMP\CMP\DFILE.OUT DEL F:\RCMP\CMP\DFILE.OUT
|
|
||||||
IF EXIST F:\RCMP\CMP\DATES.OUT DEL F:\RCMP\CMP\DATES.OUT
|
|
||||||
|
|
||||||
ECHO RMTSTA automated rename/move/delete test > F:\RCMP\RUN.LOG
|
|
||||||
ECHO Date/time stamp skipped to avoid DOS prompt. >> F:\RCMP\RUN.LOG
|
|
||||||
ECHO. >> F:\RCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === RESET TEST TREE === >> F:\RCMP\RUN.LOG
|
|
||||||
|
|
||||||
REM Delete old files individually if present.
|
|
||||||
IF EXIST F:\TRMOVE\SRC\A.TXT DEL F:\TRMOVE\SRC\A.TXT
|
|
||||||
IF EXIST F:\TRMOVE\SRC\A2.TXT DEL F:\TRMOVE\SRC\A2.TXT
|
|
||||||
IF EXIST F:\TRMOVE\SRC\EXIST.TXT DEL F:\TRMOVE\SRC\EXIST.TXT
|
|
||||||
IF EXIST F:\TRMOVE\SRC\SUB\B.TXT DEL F:\TRMOVE\SRC\SUB\B.TXT
|
|
||||||
IF EXIST F:\TRMOVE\DST\B.TXT DEL F:\TRMOVE\DST\B.TXT
|
|
||||||
IF EXIST F:\TRMOVE\DST\C.TXT DEL F:\TRMOVE\DST\C.TXT
|
|
||||||
IF EXIST F:\TRMOVE\DST\DELME.TXT DEL F:\TRMOVE\DST\DELME.TXT
|
|
||||||
IF EXIST F:\TRMOVE\DFILE\A.TXT DEL F:\TRMOVE\DFILE\A.TXT
|
|
||||||
IF EXIST F:\TRMOVE\DFILE\B.TXT DEL F:\TRMOVE\DFILE\B.TXT
|
|
||||||
IF EXIST F:\TRMOVE\DFILE\KEEP.TXT DEL F:\TRMOVE\DFILE\KEEP.TXT
|
|
||||||
IF EXIST F:\TRMOVE\DMOVE\A.TXT DEL F:\TRMOVE\DMOVE\A.TXT
|
|
||||||
IF EXIST F:\TRMOVE\DMOVE\B.TXT DEL F:\TRMOVE\DMOVE\B.TXT
|
|
||||||
IF EXIST F:\TRMOVE\DMOVE\KEEP.TXT DEL F:\TRMOVE\DMOVE\KEEP.TXT
|
|
||||||
IF EXIST F:\TRMOVE\NEMPTY\KEEP.TXT DEL F:\TRMOVE\NEMPTY\KEEP.TXT
|
|
||||||
IF EXIST F:\TRMOVE\EMPTY\NUL RD F:\TRMOVE\EMPTY
|
|
||||||
IF EXIST F:\TRMOVE\DMOVE\NUL RD F:\TRMOVE\DMOVE
|
|
||||||
IF EXIST F:\TRMOVE\DFILE\NUL RD F:\TRMOVE\DFILE
|
|
||||||
|
|
||||||
REM Recreate expected directories.
|
|
||||||
IF NOT EXIST F:\TRMOVE\SRC\NUL MD F:\TRMOVE\SRC
|
|
||||||
IF NOT EXIST F:\TRMOVE\SRC\SUB\NUL MD F:\TRMOVE\SRC\SUB
|
|
||||||
IF NOT EXIST F:\TRMOVE\DST\NUL MD F:\TRMOVE\DST
|
|
||||||
IF NOT EXIST F:\TRMOVE\DFILE\NUL MD F:\TRMOVE\DFILE
|
|
||||||
IF NOT EXIST F:\TRMOVE\NEMPTY\NUL MD F:\TRMOVE\NEMPTY
|
|
||||||
IF NOT EXIST F:\TRMOVE\EMPTY\NUL MD F:\TRMOVE\EMPTY
|
|
||||||
|
|
||||||
ECHO FILE A > F:\TRMOVE\SRC\A.TXT
|
|
||||||
ECHO EXIST TARGET > F:\TRMOVE\SRC\EXIST.TXT
|
|
||||||
ECHO FILE B > F:\TRMOVE\SRC\SUB\B.TXT
|
|
||||||
ECHO FILE C > F:\TRMOVE\DST\C.TXT
|
|
||||||
ECHO DELETE ME > F:\TRMOVE\DST\DELME.TXT
|
|
||||||
ECHO DIR A > F:\TRMOVE\DFILE\A.TXT
|
|
||||||
ECHO DIR B > F:\TRMOVE\DFILE\B.TXT
|
|
||||||
ECHO DIR KEEP > F:\TRMOVE\DFILE\KEEP.TXT
|
|
||||||
ECHO KEEP > F:\TRMOVE\NEMPTY\KEEP.TXT
|
|
||||||
|
|
||||||
NPUBLIC\FLAG F:\TRMOVE\SRC\A.TXT N >> F:\RCMP\RUN.LOG
|
|
||||||
NPUBLIC\FLAG F:\TRMOVE\SRC\SUB\B.TXT N >> F:\RCMP\RUN.LOG
|
|
||||||
NPUBLIC\FLAG F:\TRMOVE\DST\C.TXT N >> F:\RCMP\RUN.LOG
|
|
||||||
NPUBLIC\FLAG F:\TRMOVE\DST\DELME.TXT N >> F:\RCMP\RUN.LOG
|
|
||||||
NPUBLIC\FLAG F:\TRMOVE\DFILE\A.TXT N >> F:\RCMP\RUN.LOG
|
|
||||||
NPUBLIC\FLAG F:\TRMOVE\DFILE\B.TXT N >> F:\RCMP\RUN.LOG
|
|
||||||
NPUBLIC\FLAG F:\TRMOVE\DFILE\KEEP.TXT N >> F:\RCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === PRE CAPTURE === >> F:\RCMP\RUN.LOG
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE > F:\RCMP\PRE\ROOT.OUT
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE\SRC > F:\RCMP\PRE\SRC.OUT
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE\SRC\SUB > F:\RCMP\PRE\SUB.OUT
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE\DST > F:\RCMP\PRE\DST.OUT
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE\DFILE > F:\RCMP\PRE\DFILE.OUT
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE /DATES > F:\RCMP\PRE\DATES.OUT
|
|
||||||
|
|
||||||
ECHO === TEST 01: rename file in same directory === >> F:\RCMP\RUN.LOG
|
|
||||||
REN F:\TRMOVE\SRC\A.TXT A2.TXT >> F:\RCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === TEST 02: expected failure rename to existing target === >> F:\RCMP\RUN.LOG
|
|
||||||
REN F:\TRMOVE\SRC\A2.TXT EXIST.TXT >> F:\RCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === TEST 03: move-like file operation via COPY+DEL across directories === >> F:\RCMP\RUN.LOG
|
|
||||||
COPY F:\TRMOVE\SRC\SUB\B.TXT F:\TRMOVE\DST\B.TXT >> F:\RCMP\RUN.LOG
|
|
||||||
DEL F:\TRMOVE\SRC\SUB\B.TXT >> F:\RCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === TEST 04: directory rename via MOVE === >> F:\RCMP\RUN.LOG
|
|
||||||
MOVE F:\TRMOVE\DFILE F:\TRMOVE\DMOVE >> F:\RCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === TEST 05: delete file === >> F:\RCMP\RUN.LOG
|
|
||||||
DEL F:\TRMOVE\DST\DELME.TXT >> F:\RCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === TEST 06: remove empty directory === >> F:\RCMP\RUN.LOG
|
|
||||||
RD F:\TRMOVE\EMPTY >> F:\RCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === TEST 07: expected failure remove non-empty directory === >> F:\RCMP\RUN.LOG
|
|
||||||
RD F:\TRMOVE\NEMPTY >> F:\RCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO === POST CAPTURE === >> F:\RCMP\RUN.LOG
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE > F:\RCMP\POST\ROOT.OUT
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE\SRC > F:\RCMP\POST\SRC.OUT
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE\SRC\SUB > F:\RCMP\POST\SUB.OUT
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE\DST > F:\RCMP\POST\DST.OUT
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE\DMOVE > F:\RCMP\POST\DFILE.OUT
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE\NEMPTY > F:\RCMP\POST\NEMPTY.OUT
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE /DATES > F:\RCMP\POST\DATES.OUT
|
|
||||||
|
|
||||||
ECHO === COMPARE === >> F:\RCMP\RUN.LOG
|
|
||||||
FC F:\RCMP\PRE\ROOT.OUT F:\RCMP\POST\ROOT.OUT > F:\RCMP\CMP\ROOT.OUT
|
|
||||||
FC F:\RCMP\PRE\SRC.OUT F:\RCMP\POST\SRC.OUT > F:\RCMP\CMP\SRC.OUT
|
|
||||||
FC F:\RCMP\PRE\SUB.OUT F:\RCMP\POST\SUB.OUT > F:\RCMP\CMP\SUB.OUT
|
|
||||||
FC F:\RCMP\PRE\DST.OUT F:\RCMP\POST\DST.OUT > F:\RCMP\CMP\DST.OUT
|
|
||||||
FC F:\RCMP\PRE\DFILE.OUT F:\RCMP\POST\DFILE.OUT > F:\RCMP\CMP\DFILE.OUT
|
|
||||||
FC F:\RCMP\PRE\DATES.OUT F:\RCMP\POST\DATES.OUT > F:\RCMP\CMP\DATES.OUT
|
|
||||||
|
|
||||||
ECHO === DETAILED POST READBACK === >> F:\RCMP\RUN.LOG
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE\SRC\A2.TXT > F:\RCMP\POST\A2.OUT
|
|
||||||
NPUBLIC\NDIR F:\TRMOVE\DST\B.TXT > F:\RCMP\POST\MOVEDB.OUT
|
|
||||||
|
|
||||||
ECHO === SUMMARY === > F:\RCMP\SUMMARY.TXT
|
|
||||||
ECHO RMTSTA automated rename/move/delete test finished. >> F:\RCMP\SUMMARY.TXT
|
|
||||||
ECHO. >> F:\RCMP\SUMMARY.TXT
|
|
||||||
ECHO Expected final state: >> F:\RCMP\SUMMARY.TXT
|
|
||||||
ECHO - SRC contains A2.TXT and EXIST.TXT. >> F:\RCMP\SUMMARY.TXT
|
|
||||||
ECHO - SRC\SUB no longer contains B.TXT. >> F:\RCMP\SUMMARY.TXT
|
|
||||||
ECHO - DST contains B.TXT and C.TXT, but not DELME.TXT. >> F:\RCMP\SUMMARY.TXT
|
|
||||||
ECHO - DFILE was renamed/moved to DMOVE via MOVE. >> F:\RCMP\SUMMARY.TXT
|
|
||||||
ECHO - EMPTY was removed. >> F:\RCMP\SUMMARY.TXT
|
|
||||||
ECHO - NEMPTY should still exist because RD non-empty should fail. >> F:\RCMP\SUMMARY.TXT
|
|
||||||
ECHO - Rename A2.TXT to EXIST.TXT is expected to fail. >> F:\RCMP\SUMMARY.TXT
|
|
||||||
ECHO. >> F:\RCMP\SUMMARY.TXT
|
|
||||||
ECHO Optional pack results with RMTZIP.BAT. >> F:\RCMP\SUMMARY.TXT
|
|
||||||
|
|
||||||
ECHO.
|
|
||||||
ECHO RMTSTA fertig.
|
|
||||||
ECHO Ergebnisse liegen in F:\RCMP
|
|
||||||
ECHO Optional: RMTZIP ausfuehren.
|
|
||||||
ECHO.
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM RMTZIP.BAT
|
|
||||||
REM Optional packer for RMTSTA result files.
|
|
||||||
REM Requires ZIP.EXE in PATH or current directory.
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \RCMP
|
|
||||||
|
|
||||||
IF EXIST RMTSTA.ZIP DEL RMTSTA.ZIP
|
|
||||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
|
||||||
|
|
||||||
ECHO Creating RMTSTA.ZIP > ZIP.LOG
|
|
||||||
ZIP -r RMTSTA.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 \TRMOVE\NUL DELTREE /Y \TRMOVE >> ZIP.LOG
|
|
||||||
IF EXIST \RMTTEST\NUL DELTREE /Y \RMTTEST >> ZIP.LOG
|
|
||||||
IF EXIST \DFILE\NUL DELTREE /Y \DFILE >> ZIP.LOG
|
|
||||||
CD \
|
|
||||||
ECHO.
|
|
||||||
ECHO ZIP step finished.
|
|
||||||
ECHO Check:
|
|
||||||
ECHO F:\RCMP\RMTSTA.ZIP
|
|
||||||
ECHO F:\RCMP\ZIP.LOG
|
|
||||||
ECHO.
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
# REVOKE comparison test
|
|
||||||
|
|
||||||
`RVKSTA.BAT` creates `F:\RVKTEST` and compares Novell `\NPUBLIC\REVOKE` output with the public implementation `\PUBLIC\REVOKE`.
|
|
||||||
|
|
||||||
Result tree:
|
|
||||||
|
|
||||||
- `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
|
|
||||||
|
|
||||||
The direct matrix covers:
|
|
||||||
|
|
||||||
- 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`
|
|
||||||
|
|
||||||
Automatic user-context readback requires:
|
|
||||||
|
|
||||||
```bat
|
|
||||||
SET LGNTPWD=your-supervisor-password
|
|
||||||
F:\RVKSTA
|
|
||||||
```
|
|
||||||
|
|
||||||
`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.
|
|
||||||
|
|
||||||
`RVKZIP.BAT` packs the result tree and cleans `F:\RVKTEST` and `C:\RVKTMP`.
|
|
||||||
@@ -1,168 +0,0 @@
|
|||||||
@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,698 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM RVKSTA.BAT
|
|
||||||
REM Automated REVOKE comparison test for MARS NWE.
|
|
||||||
REM
|
|
||||||
REM Direct mode:
|
|
||||||
REM OUT = Novell baseline using \NPUBLIC\REVOKE
|
|
||||||
REM PUBOUT = our implementation using \PUBLIC\REVOKE
|
|
||||||
REM
|
|
||||||
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. ---
|
|
||||||
IF EXIST RVKTEST\*.* DELTREE /Y RVKTEST
|
|
||||||
IF EXIST RVKCMP\*.* DELTREE /Y RVKCMP
|
|
||||||
IF EXIST C:\RVKTMP\*.* DELTREE /Y C:\RVKTMP
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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 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 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 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 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 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 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 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 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 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 === 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 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 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
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM RVKZIP.BAT
|
|
||||||
REM Optional packer for RVKSTA result files.
|
|
||||||
REM Requires ZIP.EXE in PATH or current directory.
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \RVKCMP
|
|
||||||
|
|
||||||
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 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.
|
|
||||||
ECHO Check:
|
|
||||||
ECHO F:\RVKCMP\RVKSTA.ZIP
|
|
||||||
ECHO F:\RVKCMP\ZIP.LOG
|
|
||||||
ECHO.
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
# 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,165 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM RGHTC.BAT - delayed user-context RIGHTS capture helper.
|
|
||||||
REM Started by RGHTSTA via DLYSTRT. Runs from C:\RGHTTMP.
|
|
||||||
|
|
||||||
C:
|
|
||||||
CD \RGHTTMP
|
|
||||||
|
|
||||||
ECHO RGHTC user-context RIGHTS helper > HELPER.TXT
|
|
||||||
ECHO Current phase: logout supervisor, login NOPASSUSER. >> HELPER.TXT
|
|
||||||
|
|
||||||
LOGOUT > ULOG1.OUT
|
|
||||||
LOGIN NOPASSUSER > ULOGIN.OUT
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \NPUBLIC\RIGHTS.EXE GOTO HAVEF
|
|
||||||
ECHO F: not ready after NOPASSUSER login. >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
GOTO RELSUP
|
|
||||||
|
|
||||||
:HAVEF
|
|
||||||
ECHO Starting U10_R as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U10 > C:\RGHTTMP\UNOV\U10_R.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U10 > C:\RGHTTMP\UPUB\U10_R.OUT
|
|
||||||
ECHO Starting U11_W as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U11 > C:\RGHTTMP\UNOV\U11_W.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U11 > C:\RGHTTMP\UPUB\U11_W.OUT
|
|
||||||
ECHO Starting U12_C as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U12 > C:\RGHTTMP\UNOV\U12_C.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U12 > C:\RGHTTMP\UPUB\U12_C.OUT
|
|
||||||
ECHO Starting U13_E as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U13 > C:\RGHTTMP\UNOV\U13_E.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U13 > C:\RGHTTMP\UPUB\U13_E.OUT
|
|
||||||
ECHO Starting U14_M as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U14 > C:\RGHTTMP\UNOV\U14_M.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U14 > C:\RGHTTMP\UPUB\U14_M.OUT
|
|
||||||
ECHO Starting U15_F as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U15 > C:\RGHTTMP\UNOV\U15_F.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U15 > C:\RGHTTMP\UPUB\U15_F.OUT
|
|
||||||
ECHO Starting U16_A as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U16 > C:\RGHTTMP\UNOV\U16_A.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U16 > C:\RGHTTMP\UPUB\U16_A.OUT
|
|
||||||
ECHO Starting U17_S as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U17 > C:\RGHTTMP\UNOV\U17_S.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U17 > C:\RGHTTMP\UPUB\U17_S.OUT
|
|
||||||
ECHO Starting U20_RF as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U20 > C:\RGHTTMP\UNOV\U20_RF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U20 > C:\RGHTTMP\UPUB\U20_RF.OUT
|
|
||||||
ECHO Starting U21_RW as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U21 > C:\RGHTTMP\UNOV\U21_RW.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U21 > C:\RGHTTMP\UPUB\U21_RW.OUT
|
|
||||||
ECHO Starting U22_RWC as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U22 > C:\RGHTTMP\UNOV\U22_RWC.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U22 > C:\RGHTTMP\UPUB\U22_RWC.OUT
|
|
||||||
ECHO Starting U23_RWCE as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U23 > C:\RGHTTMP\UNOV\U23_RWCE.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U23 > C:\RGHTTMP\UPUB\U23_RWCE.OUT
|
|
||||||
ECHO Starting U24_RAL as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U24 > C:\RGHTTMP\UNOV\U24_RAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U24 > C:\RGHTTMP\UPUB\U24_RAL.OUT
|
|
||||||
ECHO Starting U25_SAL as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U25 > C:\RGHTTMP\UNOV\U25_SAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U25 > C:\RGHTTMP\UPUB\U25_SAL.OUT
|
|
||||||
ECHO Starting U26_ALL as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U26 > C:\RGHTTMP\UNOV\U26_ALL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U26 > C:\RGHTTMP\UPUB\U26_ALL.OUT
|
|
||||||
ECHO Starting U27_N as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U27 > C:\RGHTTMP\UNOV\U27_N.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U27 > C:\RGHTTMP\UPUB\U27_N.OUT
|
|
||||||
ECHO Starting U30_RE as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U30 > C:\RGHTTMP\UNOV\U30_RE.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U30 > C:\RGHTTMP\UPUB\U30_RE.OUT
|
|
||||||
ECHO Starting U31_RWF as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U31 > C:\RGHTTMP\UNOV\U31_RWF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U31 > C:\RGHTTMP\UPUB\U31_RWF.OUT
|
|
||||||
ECHO Starting U32_RCM as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U32 > C:\RGHTTMP\UNOV\U32_RCM.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U32 > C:\RGHTTMP\UPUB\U32_RCM.OUT
|
|
||||||
ECHO Starting U33_RFA as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U33 > C:\RGHTTMP\UNOV\U33_RFA.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U33 > C:\RGHTTMP\UPUB\U33_RFA.OUT
|
|
||||||
ECHO Starting U34_WCM as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U34 > C:\RGHTTMP\UNOV\U34_WCM.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U34 > C:\RGHTTMP\UPUB\U34_WCM.OUT
|
|
||||||
ECHO Starting U35_EMF as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U35 > C:\RGHTTMP\UNOV\U35_EMF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U35 > C:\RGHTTMP\UPUB\U35_EMF.OUT
|
|
||||||
ECHO Starting U36_RMF as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U36 > C:\RGHTTMP\UNOV\U36_RMF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U36 > C:\RGHTTMP\UPUB\U36_RMF.OUT
|
|
||||||
ECHO Starting U37_REMA as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U37 > C:\RGHTTMP\UNOV\U37_REMA.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U37 > C:\RGHTTMP\UPUB\U37_REMA.OUT
|
|
||||||
ECHO Starting U38_SR as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U38 > C:\RGHTTMP\UNOV\U38_SR.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U38 > C:\RGHTTMP\UPUB\U38_SR.OUT
|
|
||||||
ECHO Starting U39_SRF as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U39 > C:\RGHTTMP\UNOV\U39_SRF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U39 > C:\RGHTTMP\UPUB\U39_SRF.OUT
|
|
||||||
ECHO Starting U40_SWCM as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\U40 > C:\RGHTTMP\UNOV\U40_SWCM.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\U40 > C:\RGHTTMP\UPUB\U40_SWCM.OUT
|
|
||||||
ECHO Starting F10_R as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\UF10\F.TXT > C:\RGHTTMP\UNOV\F10_R.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\UF10\F.TXT > C:\RGHTTMP\UPUB\F10_R.OUT
|
|
||||||
ECHO Starting F11_RF as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\UF11\F.TXT > C:\RGHTTMP\UNOV\F11_RF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\UF11\F.TXT > C:\RGHTTMP\UPUB\F11_RF.OUT
|
|
||||||
ECHO Starting F12_RAL as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\UF12\F.TXT > C:\RGHTTMP\UNOV\F12_RAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\UF12\F.TXT > C:\RGHTTMP\UPUB\F12_RAL.OUT
|
|
||||||
ECHO Starting F13_ALL as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\UF13\F.TXT > C:\RGHTTMP\UNOV\F13_ALL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\UF13\F.TXT > C:\RGHTTMP\UPUB\F13_ALL.OUT
|
|
||||||
ECHO Starting F14_N as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\UF14\F.TXT > C:\RGHTTMP\UNOV\F14_N.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\UF14\F.TXT > C:\RGHTTMP\UPUB\F14_N.OUT
|
|
||||||
ECHO Starting F15_S as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\UF15\F.TXT > C:\RGHTTMP\UNOV\F15_S.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\UF15\F.TXT > C:\RGHTTMP\UPUB\F15_S.OUT
|
|
||||||
ECHO Starting F16_SAL as NOPASSUSER... >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\UF16\F.TXT > C:\RGHTTMP\UNOV\F16_SAL.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\UF16\F.TXT > C:\RGHTTMP\UPUB\F16_SAL.OUT
|
|
||||||
|
|
||||||
:RELSUP
|
|
||||||
ECHO Logging out NOPASSUSER and returning to SUPERVISOR. >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
LOGOUT > C:\RGHTTMP\ULOG2.OUT
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \LOGIN\LOGIN.EXE GOTO HAVELOGIN
|
|
||||||
ECHO F:\LOGIN\LOGIN.EXE not found. >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
GOTO MANUAL
|
|
||||||
|
|
||||||
:HAVELOGIN
|
|
||||||
F:\LOGIN\LOGIN SUPERVISOR /PWD:%LGNTPWD% > C:\RGHTTMP\ULOGSUP.OUT
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF EXIST \RGHTSTA.BAT GOTO QUEUEP2
|
|
||||||
ECHO F: not restored or \RGHTSTA.BAT not visible. >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
GOTO MANUAL
|
|
||||||
|
|
||||||
:QUEUEP2
|
|
||||||
C:
|
|
||||||
CD \RGHTTMP
|
|
||||||
IF EXIST DLYSTRT.EXE GOTO HVDLY
|
|
||||||
ECHO C:\RGHTTMP\DLYSTRT.EXE not found. >> HELPER.TXT
|
|
||||||
GOTO MANUAL
|
|
||||||
|
|
||||||
:HVDLY
|
|
||||||
ECHO Queueing F:\RGHTSTA.BAT PART2 via DLYSTRT. >> HELPER.TXT
|
|
||||||
DLYSTRT /T:2 F:\RGHTSTA.BAT PART2
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:MANUAL
|
|
||||||
ECHO Manual steps required:
|
|
||||||
ECHO LOGIN SUPERVISOR
|
|
||||||
ECHO F:
|
|
||||||
ECHO CD \
|
|
||||||
ECHO RGHTSTA PART2
|
|
||||||
ECHO RGHTZIP
|
|
||||||
ECHO Manual steps required. >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
|
|
||||||
:END
|
|
||||||
ECHO RGHTC finished. >> C:\RGHTTMP\HELPER.TXT
|
|
||||||
@@ -1,370 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM RGHTSTA.BAT
|
|
||||||
REM Automated RIGHTS comparison test for MARS NWE.
|
|
||||||
REM
|
|
||||||
REM Direct mode:
|
|
||||||
REM OUT = Novell baseline using \NPUBLIC\RIGHTS
|
|
||||||
REM PUBOUT = our implementation using \PUBLIC\RIGHTS
|
|
||||||
REM
|
|
||||||
REM User-context mode:
|
|
||||||
REM SUPERVISOR grants mixed rights to NOPASSUSER.
|
|
||||||
REM DLYSTRT starts C:\RGHTTMP\RGHTC.BAT after this script exits.
|
|
||||||
REM RGHTC logs in as NOPASSUSER and captures RIGHTS output.
|
|
||||||
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: RGHTSTA [PART2]
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:PART1
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
|
|
||||||
REM --- Clean generated test/result directories. ---
|
|
||||||
IF EXIST RGHTEST\*.* DELTREE /Y RGHTEST
|
|
||||||
IF EXIST RGHTCMP\*.* DELTREE /Y RGHTCMP
|
|
||||||
IF EXIST C:\RGHTTMP\*.* DELTREE /Y C:\RGHTTMP
|
|
||||||
|
|
||||||
IF NOT EXIST RGHTEST MD RGHTEST
|
|
||||||
IF NOT EXIST RGHTEST\SUBDIR MD RGHTEST\SUBDIR
|
|
||||||
IF NOT EXIST RGHTCMP MD RGHTCMP
|
|
||||||
IF NOT EXIST RGHTCMP\OUT MD RGHTCMP\OUT
|
|
||||||
IF NOT EXIST RGHTCMP\PUBOUT MD RGHTCMP\PUBOUT
|
|
||||||
IF NOT EXIST RGHTCMP\SETUP MD RGHTCMP\SETUP
|
|
||||||
IF NOT EXIST RGHTCMP\USETUP MD RGHTCMP\USETUP
|
|
||||||
IF NOT EXIST C:\RGHTTMP MD C:\RGHTTMP
|
|
||||||
IF NOT EXIST C:\RGHTTMP\UNOV MD C:\RGHTTMP\UNOV
|
|
||||||
IF NOT EXIST C:\RGHTTMP\UPUB MD C:\RGHTTMP\UPUB
|
|
||||||
|
|
||||||
ECHO RIGHTS ROOT FILE > F:\RGHTEST\FILE.TXT
|
|
||||||
ECHO RIGHTS INNER FILE > F:\RGHTEST\SUBDIR\INNER.TXT
|
|
||||||
|
|
||||||
ECHO RGHTSTA RIGHTS comparison test > F:\RGHTCMP\RUN.LOG
|
|
||||||
ECHO OUT = Novell baseline with \NPUBLIC\RIGHTS >> F:\RGHTCMP\RUN.LOG
|
|
||||||
ECHO PUBOUT = our implementation with \PUBLIC\RIGHTS >> F:\RGHTCMP\RUN.LOG
|
|
||||||
ECHO UOUT = user-context output collected by RGHTC. >> F:\RGHTCMP\RUN.LOG
|
|
||||||
ECHO. >> F:\RGHTCMP\RUN.LOG
|
|
||||||
|
|
||||||
ECHO Starting D01_CURR...
|
|
||||||
ECHO === D01_CURR default/current directory from F:\ === >> F:\RGHTCMP\RUN.LOG
|
|
||||||
\NPUBLIC\RIGHTS > F:\RGHTCMP\OUT\D01_CURR.OUT
|
|
||||||
\PUBLIC\RIGHTS > F:\RGHTCMP\PUBOUT\D01_CURR.OUT
|
|
||||||
ECHO Starting D02_TDIR...
|
|
||||||
ECHO === D02_TDIR explicit test directory === >> F:\RGHTCMP\RUN.LOG
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST > F:\RGHTCMP\OUT\D02_TDIR.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST > F:\RGHTCMP\PUBOUT\D02_TDIR.OUT
|
|
||||||
ECHO Starting D03_SUBD...
|
|
||||||
ECHO === D03_SUBD explicit subdirectory === >> F:\RGHTCMP\RUN.LOG
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\SUBDIR > F:\RGHTCMP\OUT\D03_SUBD.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\SUBDIR > F:\RGHTCMP\PUBOUT\D03_SUBD.OUT
|
|
||||||
ECHO Starting D04_FILE...
|
|
||||||
ECHO === D04_FILE explicit file === >> F:\RGHTCMP\RUN.LOG
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\FILE.TXT > F:\RGHTCMP\OUT\D04_FILE.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\FILE.TXT > F:\RGHTCMP\PUBOUT\D04_FILE.OUT
|
|
||||||
ECHO Starting D05_INNE...
|
|
||||||
ECHO === D05_INNE explicit nested file === >> F:\RGHTCMP\RUN.LOG
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\SUBDIR\INNER.TXT > F:\RGHTCMP\OUT\D05_INNE.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\SUBDIR\INNER.TXT > F:\RGHTCMP\PUBOUT\D05_INNE.OUT
|
|
||||||
ECHO Starting D06_CURR...
|
|
||||||
ECHO === D06_CURR default/current directory from F:\RGHTEST === >> F:\RGHTCMP\RUN.LOG
|
|
||||||
CD \RGHTEST
|
|
||||||
\NPUBLIC\RIGHTS > F:\RGHTCMP\OUT\D06_CURR.OUT
|
|
||||||
\PUBLIC\RIGHTS > F:\RGHTCMP\PUBOUT\D06_CURR.OUT
|
|
||||||
ECHO Starting D07_RELF...
|
|
||||||
\NPUBLIC\RIGHTS FILE.TXT > F:\RGHTCMP\OUT\D07_RELF.OUT
|
|
||||||
\PUBLIC\RIGHTS FILE.TXT > F:\RGHTCMP\PUBOUT\D07_RELF.OUT
|
|
||||||
ECHO Starting D08_RELD...
|
|
||||||
\NPUBLIC\RIGHTS SUBDIR > F:\RGHTCMP\OUT\D08_RELD.OUT
|
|
||||||
\PUBLIC\RIGHTS SUBDIR > F:\RGHTCMP\PUBOUT\D08_RELD.OUT
|
|
||||||
CD \
|
|
||||||
ECHO Starting D90_MISD...
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\MISSING > F:\RGHTCMP\OUT\D90_MISD.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\MISSING > F:\RGHTCMP\PUBOUT\D90_MISD.OUT
|
|
||||||
ECHO Starting D91_MISF...
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST\NOFILE.TXT > F:\RGHTCMP\OUT\D91_MISF.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST\NOFILE.TXT > F:\RGHTCMP\PUBOUT\D91_MISF.OUT
|
|
||||||
ECHO Starting D98_TOOM...
|
|
||||||
\NPUBLIC\RIGHTS F:\RGHTEST EXTRA > F:\RGHTCMP\OUT\D98_TOOM.OUT
|
|
||||||
\PUBLIC\RIGHTS F:\RGHTEST EXTRA > F:\RGHTCMP\PUBOUT\D98_TOOM.OUT
|
|
||||||
ECHO Starting D99_HELP...
|
|
||||||
\NPUBLIC\RIGHTS /? > F:\RGHTCMP\OUT\D99_HELP.OUT
|
|
||||||
\PUBLIC\RIGHTS /? > F:\RGHTCMP\PUBOUT\D99_HELP.OUT
|
|
||||||
|
|
||||||
ECHO === COMPARE NOVELL OUT AGAINST PUBLIC OUT === > F:\RGHTCMP\COMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\OUT\D01_CURR.OUT F:\RGHTCMP\PUBOUT\D01_CURR.OUT >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\OUT\D02_TDIR.OUT F:\RGHTCMP\PUBOUT\D02_TDIR.OUT >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\OUT\D03_SUBD.OUT F:\RGHTCMP\PUBOUT\D03_SUBD.OUT >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\OUT\D04_FILE.OUT F:\RGHTCMP\PUBOUT\D04_FILE.OUT >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\OUT\D05_INNE.OUT F:\RGHTCMP\PUBOUT\D05_INNE.OUT >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\OUT\D06_CURR.OUT F:\RGHTCMP\PUBOUT\D06_CURR.OUT >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\OUT\D07_RELF.OUT F:\RGHTCMP\PUBOUT\D07_RELF.OUT >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\OUT\D08_RELD.OUT F:\RGHTCMP\PUBOUT\D08_RELD.OUT >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\OUT\D90_MISD.OUT F:\RGHTCMP\PUBOUT\D90_MISD.OUT >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\OUT\D91_MISF.OUT F:\RGHTCMP\PUBOUT\D91_MISF.OUT >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\OUT\D98_TOOM.OUT F:\RGHTCMP\PUBOUT\D98_TOOM.OUT >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\OUT\D99_HELP.OUT F:\RGHTCMP\PUBOUT\D99_HELP.OUT >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
ECHO. >> F:\RGHTCMP\COMPARE.LOG
|
|
||||||
|
|
||||||
ECHO Preparing NOPASSUSER rights matrix...
|
|
||||||
ECHO === USER-CONTEXT RIGHTS MATRIX SETUP === >> F:\RGHTCMP\RUN.LOG
|
|
||||||
ECHO Setup U10_R = R...
|
|
||||||
IF NOT EXIST RGHTEST\U10 MD RGHTEST\U10
|
|
||||||
ECHO U10_R > F:\RGHTEST\U10\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U10 > F:\RGHTCMP\USETUP\U10_R.REM
|
|
||||||
\NPUBLIC\GRANT R FOR F:\RGHTEST\U10 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U10_R.GRN
|
|
||||||
ECHO Setup U11_W = W...
|
|
||||||
IF NOT EXIST RGHTEST\U11 MD RGHTEST\U11
|
|
||||||
ECHO U11_W > F:\RGHTEST\U11\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U11 > F:\RGHTCMP\USETUP\U11_W.REM
|
|
||||||
\NPUBLIC\GRANT W FOR F:\RGHTEST\U11 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U11_W.GRN
|
|
||||||
ECHO Setup U12_C = C...
|
|
||||||
IF NOT EXIST RGHTEST\U12 MD RGHTEST\U12
|
|
||||||
ECHO U12_C > F:\RGHTEST\U12\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U12 > F:\RGHTCMP\USETUP\U12_C.REM
|
|
||||||
\NPUBLIC\GRANT C FOR F:\RGHTEST\U12 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U12_C.GRN
|
|
||||||
ECHO Setup U13_E = E...
|
|
||||||
IF NOT EXIST RGHTEST\U13 MD RGHTEST\U13
|
|
||||||
ECHO U13_E > F:\RGHTEST\U13\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U13 > F:\RGHTCMP\USETUP\U13_E.REM
|
|
||||||
\NPUBLIC\GRANT E FOR F:\RGHTEST\U13 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U13_E.GRN
|
|
||||||
ECHO Setup U14_M = M...
|
|
||||||
IF NOT EXIST RGHTEST\U14 MD RGHTEST\U14
|
|
||||||
ECHO U14_M > F:\RGHTEST\U14\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U14 > F:\RGHTCMP\USETUP\U14_M.REM
|
|
||||||
\NPUBLIC\GRANT M FOR F:\RGHTEST\U14 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U14_M.GRN
|
|
||||||
ECHO Setup U15_F = F...
|
|
||||||
IF NOT EXIST RGHTEST\U15 MD RGHTEST\U15
|
|
||||||
ECHO U15_F > F:\RGHTEST\U15\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U15 > F:\RGHTCMP\USETUP\U15_F.REM
|
|
||||||
\NPUBLIC\GRANT F FOR F:\RGHTEST\U15 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U15_F.GRN
|
|
||||||
ECHO Setup U16_A = A...
|
|
||||||
IF NOT EXIST RGHTEST\U16 MD RGHTEST\U16
|
|
||||||
ECHO U16_A > F:\RGHTEST\U16\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U16 > F:\RGHTCMP\USETUP\U16_A.REM
|
|
||||||
\NPUBLIC\GRANT A FOR F:\RGHTEST\U16 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U16_A.GRN
|
|
||||||
ECHO Setup U17_S = S...
|
|
||||||
IF NOT EXIST RGHTEST\U17 MD RGHTEST\U17
|
|
||||||
ECHO U17_S > F:\RGHTEST\U17\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U17 > F:\RGHTCMP\USETUP\U17_S.REM
|
|
||||||
\NPUBLIC\GRANT S FOR F:\RGHTEST\U17 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U17_S.GRN
|
|
||||||
ECHO Setup U20_RF = R F...
|
|
||||||
IF NOT EXIST RGHTEST\U20 MD RGHTEST\U20
|
|
||||||
ECHO U20_RF > F:\RGHTEST\U20\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U20 > F:\RGHTCMP\USETUP\U20_RF.REM
|
|
||||||
\NPUBLIC\GRANT R F FOR F:\RGHTEST\U20 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U20_RF.GRN
|
|
||||||
ECHO Setup U21_RW = R W...
|
|
||||||
IF NOT EXIST RGHTEST\U21 MD RGHTEST\U21
|
|
||||||
ECHO U21_RW > F:\RGHTEST\U21\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U21 > F:\RGHTCMP\USETUP\U21_RW.REM
|
|
||||||
\NPUBLIC\GRANT R W FOR F:\RGHTEST\U21 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U21_RW.GRN
|
|
||||||
ECHO Setup U22_RWC = R W C...
|
|
||||||
IF NOT EXIST RGHTEST\U22 MD RGHTEST\U22
|
|
||||||
ECHO U22_RWC > F:\RGHTEST\U22\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U22 > F:\RGHTCMP\USETUP\U22_RWC.REM
|
|
||||||
\NPUBLIC\GRANT R W C FOR F:\RGHTEST\U22 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U22_RWC.GRN
|
|
||||||
ECHO Setup U23_RWCE = R W C E...
|
|
||||||
IF NOT EXIST RGHTEST\U23 MD RGHTEST\U23
|
|
||||||
ECHO U23_RWCE > F:\RGHTEST\U23\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U23 > F:\RGHTCMP\USETUP\U23_RWCE.REM
|
|
||||||
\NPUBLIC\GRANT R W C E FOR F:\RGHTEST\U23 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U23_RWCE.GRN
|
|
||||||
ECHO Setup U24_RAL = R W C E M F A...
|
|
||||||
IF NOT EXIST RGHTEST\U24 MD RGHTEST\U24
|
|
||||||
ECHO U24_RAL > F:\RGHTEST\U24\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U24 > F:\RGHTCMP\USETUP\U24_RAL.REM
|
|
||||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RGHTEST\U24 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U24_RAL.GRN
|
|
||||||
ECHO Setup U25_SAL = S R W C E M F A...
|
|
||||||
IF NOT EXIST RGHTEST\U25 MD RGHTEST\U25
|
|
||||||
ECHO U25_SAL > F:\RGHTEST\U25\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U25 > F:\RGHTCMP\USETUP\U25_SAL.REM
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RGHTEST\U25 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U25_SAL.GRN
|
|
||||||
ECHO Setup U26_ALL = ALL...
|
|
||||||
IF NOT EXIST RGHTEST\U26 MD RGHTEST\U26
|
|
||||||
ECHO U26_ALL > F:\RGHTEST\U26\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U26 > F:\RGHTCMP\USETUP\U26_ALL.REM
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\RGHTEST\U26 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U26_ALL.GRN
|
|
||||||
ECHO Setup U27_N = N...
|
|
||||||
IF NOT EXIST RGHTEST\U27 MD RGHTEST\U27
|
|
||||||
ECHO U27_N > F:\RGHTEST\U27\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U27 > F:\RGHTCMP\USETUP\U27_N.REM
|
|
||||||
\NPUBLIC\GRANT N FOR F:\RGHTEST\U27 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U27_N.GRN
|
|
||||||
ECHO Setup U30_RE = R E...
|
|
||||||
IF NOT EXIST RGHTEST\U30 MD RGHTEST\U30
|
|
||||||
ECHO U30_RE > F:\RGHTEST\U30\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U30 > F:\RGHTCMP\USETUP\U30_RE.REM
|
|
||||||
\NPUBLIC\GRANT R E FOR F:\RGHTEST\U30 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U30_RE.GRN
|
|
||||||
ECHO Setup U31_RWF = R W F...
|
|
||||||
IF NOT EXIST RGHTEST\U31 MD RGHTEST\U31
|
|
||||||
ECHO U31_RWF > F:\RGHTEST\U31\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U31 > F:\RGHTCMP\USETUP\U31_RWF.REM
|
|
||||||
\NPUBLIC\GRANT R W F FOR F:\RGHTEST\U31 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U31_RWF.GRN
|
|
||||||
ECHO Setup U32_RCM = R C M...
|
|
||||||
IF NOT EXIST RGHTEST\U32 MD RGHTEST\U32
|
|
||||||
ECHO U32_RCM > F:\RGHTEST\U32\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U32 > F:\RGHTCMP\USETUP\U32_RCM.REM
|
|
||||||
\NPUBLIC\GRANT R C M FOR F:\RGHTEST\U32 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U32_RCM.GRN
|
|
||||||
ECHO Setup U33_RFA = R F A...
|
|
||||||
IF NOT EXIST RGHTEST\U33 MD RGHTEST\U33
|
|
||||||
ECHO U33_RFA > F:\RGHTEST\U33\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U33 > F:\RGHTCMP\USETUP\U33_RFA.REM
|
|
||||||
\NPUBLIC\GRANT R F A FOR F:\RGHTEST\U33 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U33_RFA.GRN
|
|
||||||
ECHO Setup U34_WCM = W C M...
|
|
||||||
IF NOT EXIST RGHTEST\U34 MD RGHTEST\U34
|
|
||||||
ECHO U34_WCM > F:\RGHTEST\U34\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U34 > F:\RGHTCMP\USETUP\U34_WCM.REM
|
|
||||||
\NPUBLIC\GRANT W C M FOR F:\RGHTEST\U34 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U34_WCM.GRN
|
|
||||||
ECHO Setup U35_EMF = E M F...
|
|
||||||
IF NOT EXIST RGHTEST\U35 MD RGHTEST\U35
|
|
||||||
ECHO U35_EMF > F:\RGHTEST\U35\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U35 > F:\RGHTCMP\USETUP\U35_EMF.REM
|
|
||||||
\NPUBLIC\GRANT E M F FOR F:\RGHTEST\U35 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U35_EMF.GRN
|
|
||||||
ECHO Setup U36_RMF = R W C M F...
|
|
||||||
IF NOT EXIST RGHTEST\U36 MD RGHTEST\U36
|
|
||||||
ECHO U36_RMF > F:\RGHTEST\U36\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U36 > F:\RGHTCMP\USETUP\U36_RMF.REM
|
|
||||||
\NPUBLIC\GRANT R W C M F FOR F:\RGHTEST\U36 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U36_RMF.GRN
|
|
||||||
ECHO Setup U37_REMA = R E M A...
|
|
||||||
IF NOT EXIST RGHTEST\U37 MD RGHTEST\U37
|
|
||||||
ECHO U37_REMA > F:\RGHTEST\U37\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U37 > F:\RGHTCMP\USETUP\U37_REMA.REM
|
|
||||||
\NPUBLIC\GRANT R E M A FOR F:\RGHTEST\U37 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U37_REMA.GRN
|
|
||||||
ECHO Setup U38_SR = S R...
|
|
||||||
IF NOT EXIST RGHTEST\U38 MD RGHTEST\U38
|
|
||||||
ECHO U38_SR > F:\RGHTEST\U38\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U38 > F:\RGHTCMP\USETUP\U38_SR.REM
|
|
||||||
\NPUBLIC\GRANT S R FOR F:\RGHTEST\U38 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U38_SR.GRN
|
|
||||||
ECHO Setup U39_SRF = S R F...
|
|
||||||
IF NOT EXIST RGHTEST\U39 MD RGHTEST\U39
|
|
||||||
ECHO U39_SRF > F:\RGHTEST\U39\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U39 > F:\RGHTCMP\USETUP\U39_SRF.REM
|
|
||||||
\NPUBLIC\GRANT S R F FOR F:\RGHTEST\U39 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U39_SRF.GRN
|
|
||||||
ECHO Setup U40_SWCM = S W C M...
|
|
||||||
IF NOT EXIST RGHTEST\U40 MD RGHTEST\U40
|
|
||||||
ECHO U40_SWCM > F:\RGHTEST\U40\FILE.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\U40 > F:\RGHTCMP\USETUP\U40_SWCM.REM
|
|
||||||
\NPUBLIC\GRANT S W C M FOR F:\RGHTEST\U40 TO USER NOPASSUSER > F:\RGHTCMP\USETUP\U40_SWCM.GRN
|
|
||||||
ECHO Setup F10_R = R /FILES...
|
|
||||||
IF NOT EXIST RGHTEST\UF10 MD RGHTEST\UF10
|
|
||||||
ECHO F10_R > F:\RGHTEST\UF10\F.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\UF10\F.TXT > F:\RGHTCMP\USETUP\F10_R.REM
|
|
||||||
\NPUBLIC\GRANT R FOR F:\RGHTEST\UF10\F.TXT TO USER NOPASSUSER /FILES > F:\RGHTCMP\USETUP\F10_R.GRN
|
|
||||||
ECHO Setup F11_RF = R F /FILES...
|
|
||||||
IF NOT EXIST RGHTEST\UF11 MD RGHTEST\UF11
|
|
||||||
ECHO F11_RF > F:\RGHTEST\UF11\F.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\UF11\F.TXT > F:\RGHTCMP\USETUP\F11_RF.REM
|
|
||||||
\NPUBLIC\GRANT R F FOR F:\RGHTEST\UF11\F.TXT TO USER NOPASSUSER /FILES > F:\RGHTCMP\USETUP\F11_RF.GRN
|
|
||||||
ECHO Setup F12_RAL = R W C E M F A /FILES...
|
|
||||||
IF NOT EXIST RGHTEST\UF12 MD RGHTEST\UF12
|
|
||||||
ECHO F12_RAL > F:\RGHTEST\UF12\F.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\UF12\F.TXT > F:\RGHTCMP\USETUP\F12_RAL.REM
|
|
||||||
\NPUBLIC\GRANT R W C E M F A FOR F:\RGHTEST\UF12\F.TXT TO USER NOPASSUSER /FILES > F:\RGHTCMP\USETUP\F12_RAL.GRN
|
|
||||||
ECHO Setup F13_ALL = ALL /FILES...
|
|
||||||
IF NOT EXIST RGHTEST\UF13 MD RGHTEST\UF13
|
|
||||||
ECHO F13_ALL > F:\RGHTEST\UF13\F.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\UF13\F.TXT > F:\RGHTCMP\USETUP\F13_ALL.REM
|
|
||||||
\NPUBLIC\GRANT ALL FOR F:\RGHTEST\UF13\F.TXT TO USER NOPASSUSER /FILES > F:\RGHTCMP\USETUP\F13_ALL.GRN
|
|
||||||
ECHO Setup F14_N = N /FILES...
|
|
||||||
IF NOT EXIST RGHTEST\UF14 MD RGHTEST\UF14
|
|
||||||
ECHO F14_N > F:\RGHTEST\UF14\F.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\UF14\F.TXT > F:\RGHTCMP\USETUP\F14_N.REM
|
|
||||||
\NPUBLIC\GRANT N FOR F:\RGHTEST\UF14\F.TXT TO USER NOPASSUSER /FILES > F:\RGHTCMP\USETUP\F14_N.GRN
|
|
||||||
ECHO Setup F15_S = S /FILES...
|
|
||||||
IF NOT EXIST RGHTEST\UF15 MD RGHTEST\UF15
|
|
||||||
ECHO F15_S > F:\RGHTEST\UF15\F.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\UF15\F.TXT > F:\RGHTCMP\USETUP\F15_S.REM
|
|
||||||
\NPUBLIC\GRANT S FOR F:\RGHTEST\UF15\F.TXT TO USER NOPASSUSER /FILES > F:\RGHTCMP\USETUP\F15_S.GRN
|
|
||||||
ECHO Setup F16_SAL = S R W C E M F A /FILES...
|
|
||||||
IF NOT EXIST RGHTEST\UF16 MD RGHTEST\UF16
|
|
||||||
ECHO F16_SAL > F:\RGHTEST\UF16\F.TXT
|
|
||||||
\NPUBLIC\REMOVE USER NOPASSUSER FROM F:\RGHTEST\UF16\F.TXT > F:\RGHTCMP\USETUP\F16_SAL.REM
|
|
||||||
\NPUBLIC\GRANT S R W C E M F A FOR F:\RGHTEST\UF16\F.TXT TO USER NOPASSUSER /FILES > F:\RGHTCMP\USETUP\F16_SAL.GRN
|
|
||||||
|
|
||||||
IF "%LGNTPWD%"=="" GOTO SKIPUSER
|
|
||||||
ECHO Installing delayed user-context helper...
|
|
||||||
IF NOT EXIST C:\RGHTTMP MD C:\RGHTTMP
|
|
||||||
IF NOT EXIST C:\RGHTTMP\UNOV MD C:\RGHTTMP\UNOV
|
|
||||||
IF NOT EXIST C:\RGHTTMP\UPUB MD C:\RGHTTMP\UPUB
|
|
||||||
COPY F:\RGHTC.BAT C:\RGHTTMP\RGHTC.BAT > F:\RGHTCMP\RGHTC.CPY
|
|
||||||
COPY \PUBLIC\DLYSTRT.EXE C:\RGHTTMP\DLYSTRT.EXE > F:\RGHTCMP\DLY.CPY
|
|
||||||
C:
|
|
||||||
CD \RGHTTMP
|
|
||||||
DLYSTRT /T:2 RGHTC.BAT
|
|
||||||
ECHO RGHTSTA part 1 finished. RGHTC will run delayed from C:\RGHTTMP.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:SKIPUSER
|
|
||||||
ECHO LGNTPWD is not set. User-context matrix was not started.
|
|
||||||
ECHO Set LGNTPWD and run RGHTSTA again for the automatic NOPASSUSER matrix.
|
|
||||||
ECHO LGNTPWD not set; user-context matrix skipped. >> F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
GOTO WRITESUM
|
|
||||||
|
|
||||||
:WRITESUM
|
|
||||||
ECHO === SUMMARY === > F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
ECHO RGHTSTA direct RIGHTS comparison finished. >> F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
ECHO User-context matrix requires LGNTPWD. >> F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
ECHO Optional: RGHTZIP ausfuehren. >> F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:PART2
|
|
||||||
F:
|
|
||||||
CD \
|
|
||||||
IF NOT EXIST RGHTCMP MD RGHTCMP
|
|
||||||
IF NOT EXIST RGHTCMP\UNOV MD RGHTCMP\UNOV
|
|
||||||
IF NOT EXIST RGHTCMP\UPUB MD RGHTCMP\UPUB
|
|
||||||
COPY C:\RGHTTMP\UNOV\*.OUT F:\RGHTCMP\UNOV > F:\RGHTCMP\UPART2.LOG
|
|
||||||
COPY C:\RGHTTMP\UPUB\*.OUT F:\RGHTCMP\UPUB >> F:\RGHTCMP\UPART2.LOG
|
|
||||||
COPY C:\RGHTTMP\*.OUT F:\RGHTCMP >> F:\RGHTCMP\UPART2.LOG
|
|
||||||
COPY C:\RGHTTMP\HELPER.TXT F:\RGHTCMP >> F:\RGHTCMP\UPART2.LOG
|
|
||||||
ECHO === USER-CONTEXT COMPARE NOVELL AGAINST PUBLIC === > F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U10_R.OUT F:\RGHTCMP\UPUB\U10_R.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U11_W.OUT F:\RGHTCMP\UPUB\U11_W.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U12_C.OUT F:\RGHTCMP\UPUB\U12_C.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U13_E.OUT F:\RGHTCMP\UPUB\U13_E.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U14_M.OUT F:\RGHTCMP\UPUB\U14_M.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U15_F.OUT F:\RGHTCMP\UPUB\U15_F.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U16_A.OUT F:\RGHTCMP\UPUB\U16_A.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U17_S.OUT F:\RGHTCMP\UPUB\U17_S.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U20_RF.OUT F:\RGHTCMP\UPUB\U20_RF.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U21_RW.OUT F:\RGHTCMP\UPUB\U21_RW.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U22_RWC.OUT F:\RGHTCMP\UPUB\U22_RWC.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U23_RWCE.OUT F:\RGHTCMP\UPUB\U23_RWCE.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U24_RAL.OUT F:\RGHTCMP\UPUB\U24_RAL.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U25_SAL.OUT F:\RGHTCMP\UPUB\U25_SAL.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U26_ALL.OUT F:\RGHTCMP\UPUB\U26_ALL.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U27_N.OUT F:\RGHTCMP\UPUB\U27_N.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U30_RE.OUT F:\RGHTCMP\UPUB\U30_RE.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U31_RWF.OUT F:\RGHTCMP\UPUB\U31_RWF.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U32_RCM.OUT F:\RGHTCMP\UPUB\U32_RCM.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U33_RFA.OUT F:\RGHTCMP\UPUB\U33_RFA.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U34_WCM.OUT F:\RGHTCMP\UPUB\U34_WCM.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U35_EMF.OUT F:\RGHTCMP\UPUB\U35_EMF.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U36_RMF.OUT F:\RGHTCMP\UPUB\U36_RMF.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U37_REMA.OUT F:\RGHTCMP\UPUB\U37_REMA.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U38_SR.OUT F:\RGHTCMP\UPUB\U38_SR.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U39_SRF.OUT F:\RGHTCMP\UPUB\U39_SRF.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\U40_SWCM.OUT F:\RGHTCMP\UPUB\U40_SWCM.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\F10_R.OUT F:\RGHTCMP\UPUB\F10_R.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\F11_RF.OUT F:\RGHTCMP\UPUB\F11_RF.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\F12_RAL.OUT F:\RGHTCMP\UPUB\F12_RAL.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\F13_ALL.OUT F:\RGHTCMP\UPUB\F13_ALL.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\F14_N.OUT F:\RGHTCMP\UPUB\F14_N.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\F15_S.OUT F:\RGHTCMP\UPUB\F15_S.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
FC F:\RGHTCMP\UNOV\F16_SAL.OUT F:\RGHTCMP\UPUB\F16_SAL.OUT >> F:\RGHTCMP\UCOMPARE.LOG
|
|
||||||
ECHO === SUMMARY === > F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
ECHO RGHTSTA RIGHTS comparison finished. >> F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
ECHO. >> F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
ECHO OUT/PUBOUT compare direct SUPERVISOR output. >> F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
ECHO UNOV/UPUB compare effective RIGHTS as NOPASSUSER. >> F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
ECHO USETUP contains GRANT/REMOVE setup output. >> F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
ECHO. >> F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
ECHO Optional: RGHTZIP ausfuehren. >> F:\RGHTCMP\SUMMARY.TXT
|
|
||||||
ECHO RGHTSTA PART2 fertig.
|
|
||||||
ECHO Ergebnisse liegen in F:\RGHTCMP
|
|
||||||
ECHO Optional: RGHTZIP ausfuehren.
|
|
||||||
GOTO END
|
|
||||||
|
|
||||||
:END
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM RGHTZIP.BAT
|
|
||||||
REM Optional packer for RGHTSTA result files.
|
|
||||||
REM Requires ZIP.EXE in PATH or current directory.
|
|
||||||
|
|
||||||
F:
|
|
||||||
CD \RGHTCMP
|
|
||||||
|
|
||||||
IF EXIST RGHTSTA.ZIP DEL RGHTSTA.ZIP
|
|
||||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
|
||||||
|
|
||||||
ECHO Creating RGHTSTA.ZIP > ZIP.LOG
|
|
||||||
ZIP -r RGHTSTA.ZIP RUN.LOG SUMMARY.TXT COMPARE.LOG UCOMPARE.LOG UPART2.LOG HELPER.TXT ULOG1.OUT ULOGIN.OUT ULOG2.OUT ULOGSUP.OUT OUT PUBOUT 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 \RGHTEST\*.* DELTREE /Y \RGHTEST >> ZIP.LOG
|
|
||||||
IF EXIST C:\RGHTTMP\*.* DELTREE /Y C:\RGHTTMP >> ZIP.LOG
|
|
||||||
CD \
|
|
||||||
ECHO.
|
|
||||||
ECHO ZIP step finished.
|
|
||||||
ECHO Check:
|
|
||||||
ECHO F:\RGHTCMP\RGHTSTA.ZIP
|
|
||||||
ECHO F:\RGHTCMP\ZIP.LOG
|
|
||||||
ECHO.
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
# Rights user / trustee practical matrix test
|
|
||||||
|
|
||||||
This test checks whether trustee rights granted to `MARIO` actually control
|
|
||||||
real DOS operations. It also contains a rename-rights matrix.
|
|
||||||
|
|
||||||
## Files
|
|
||||||
|
|
||||||
| File | Run as | Purpose |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `RUTPRE.BAT` | SUPERVISOR | Create test tree and grant rights to MARIO. |
|
|
||||||
| `RUTMARIO.BAT` | MARIO | Perform real operations. |
|
|
||||||
| `RUTPOST.BAT` | SUPERVISOR | Capture final state and summary. |
|
|
||||||
| `RUTZIP.BAT` | SUPERVISOR | Pack results into `RUTSTA.ZIP`. |
|
|
||||||
|
|
||||||
## Flow
|
|
||||||
|
|
||||||
```text
|
|
||||||
Login SUPERVISOR
|
|
||||||
RUTPRE
|
|
||||||
|
|
||||||
Logout / Login MARIO
|
|
||||||
RUTMARIO
|
|
||||||
|
|
||||||
Logout / Login SUPERVISOR
|
|
||||||
RUTPOST
|
|
||||||
RUTZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
Result ZIP:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\RUCMP\RUTSTA.ZIP
|
|
||||||
```
|
|
||||||
|
|
||||||
Linux package with server log:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo ./mars_packtest_v3.sh rutsta 5 mario
|
|
||||||
```
|
|
||||||
|
|
||||||
## Rename matrix
|
|
||||||
|
|
||||||
The previous run showed rename failing with `R W M F` while ALL rights worked.
|
|
||||||
This version creates four directories:
|
|
||||||
|
|
||||||
```text
|
|
||||||
MOD1 = R W M F
|
|
||||||
MOD2 = R W C M F
|
|
||||||
MOD3 = R W E M F
|
|
||||||
MOD4 = R W C E M F
|
|
||||||
```
|
|
||||||
|
|
||||||
`RUTMARIO.BAT` tries:
|
|
||||||
|
|
||||||
```text
|
|
||||||
REN F:\RUTEST\MODx\M.TXT M2.TXT
|
|
||||||
```
|
|
||||||
|
|
||||||
The result is written to:
|
|
||||||
|
|
||||||
```text
|
|
||||||
F:\RUCMP\MARIO\U06.OUT
|
|
||||||
```
|
|
||||||
|
|
||||||
## Other coverage
|
|
||||||
|
|
||||||
- R/F read + file scan
|
|
||||||
- R/F/C create
|
|
||||||
- R/W/F write/append
|
|
||||||
- R/F/E erase
|
|
||||||
- F only directory scan
|
|
||||||
- R/F/A access-control test
|
|
||||||
- R/W/C/E/M/F/A all-rights operation set
|
|
||||||
|
|
||||||
`RUTPRE.BAT` now also grants MARIO write/create rights to `F:\RUCMP\MARIO`,
|
|
||||||
so the `Uxx.OUT` files should be created.
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user