docs: audit accounting endpoint stubs

This commit is contained in:
Mario Fetka
2026-06-02 16:34:07 +00:00
parent df3f9b3e3b
commit f1e88ab88d
4 changed files with 117 additions and 5 deletions

15
AI.md
View File

@@ -642,3 +642,18 @@ Latest endpoint audit checkpoint from patch 0225:
a separate secure secret-storage provider with strict no-secret logging rules.
Next patch number should be `0226`.
Latest endpoint audit checkpoint from patch 0226:
- After skipping later-generation-only material, the next relevant block found
was Accounting: SDK `0x2222/23/150`..`23/153` / wire `0x96`..`0x99`.
- Patch `0226` adds disabled `#if 0` selector stubs in `src/nwbind.c` for
Get Current Account Status, Submit Account Charge, Submit Account Hold, and
Submit Account Note. The NDK marks these as NetWare 2.x/3.x/4.x/5.x, so they
are eligible under the 1.x/2.x/3.x plus planned-4.x audit scope.
- Do not fake success for these accounting calls: print/accounting servers can
use hold/charge/note semantics for real billing/audit behavior. Future owner
is the accounting provider, with possible integration to queue printing for
page/job charging.
Next patch number should be `0227`.

View File

@@ -894,7 +894,10 @@ Accounting is a maybe. It has a separate protocol domain, but in many setups it
may be small enough to stay as an in-process provider. A process boundary only
makes sense if accounting grows into a real persistent service with charges,
holds, notes, audit records, and recovery behavior that should be isolated from
connection handlers.
connection handlers. The legacy Accounting NCPs (`23/150` through `23/153`) can
also be used by accounting/print servers to hold, charge, and note service work,
so future queue-printing integration should call into the accounting provider
rather than duplicating balance/hold/audit behavior inside the queue provider.
### Poor process candidates

14
TODO.md
View File

@@ -173,10 +173,10 @@ Current status:
Present in the code but not yet fully endpoint-audited:
- SDK `0x2222/23` / wire `0x17` File Server Environment: the audit has started
with file-information, login/connection, and bindery-object calls. Remaining
property, set, password, queue, and management/admin subfunctions still need
the same PDF/WebSDK/include comparison in `src/nwbind.c` and the related
queue prehandlers.
with file-information, login/connection, bindery-object, queue,
management/admin, and accounting calls. Remaining property, set, and
password subfunctions still need the same PDF/WebSDK/include comparison in
`src/nwbind.c` and the related queue prehandlers.
- SDK `0x2222/34` / wire `0x22` TTS calls are present in `src/nwconn.c` and
have been endpoint-audited as an unsupported/no-rollback compatibility group.
- SDK `0x2222/35` / wire `0x23` AFP calls are present in `src/nwconn.c` and
@@ -239,6 +239,12 @@ Present in the code but not yet fully endpoint-audited:
sparse-data compatibility calls. Patch 0222 records disabled `#if 0` slots
in `src/nwconn.c`; future implementation belongs to the filesystem/namespace
provider and should not be confused with NDS directory-object attributes.
- SDK `0x2222/23/150`..`23/153` / wire `0x96`..`0x99` Accounting is
source-stub-audited as a NetWare 2.x/3.x/4.x-compatible accounting-server
family. Patch 0226 records disabled `#if 0` selector slots in `src/nwbind.c`
for Get Current Account Status, Submit Account Charge, Submit Account Hold,
and Submit Account Note. Future ownership belongs to an accounting provider,
with possible bridge points to queue printing for charge/hold/note behavior.
SDK-listed blocks that do not currently show a top-level handler in
`src/nwconn.c`:

View File

@@ -2724,6 +2724,94 @@ static void handle_fxx(int gelen, int func)
completition=(uint8) -result;
}break;
#if 0
case 0x96: { /* Get Current Account Status */
/*
* SDK 23/150 / wire 0x96 Get Current Account Status.
* NetWare Server: 2.x, 3.x, 4.x, 5.x.
* Eligible for the current 1.x/2.x/3.x compatibility
* audit because accounting servers and print servers can
* query ACCOUNT_BALANCE/ACCOUNT_HOLDS before charging for
* services.
* Request payload after SubFunctionCode:
* word ClientType (Hi-Lo)
* byte ClientNameLen
* byte ClientName[ClientNameLen]
* Reply payload:
* long AccountBalance (Hi-Lo)
* long CreditLimit (Hi-Lo)
* byte Reserved[120]
* 16 x { long HolderID (Hi-Lo), long HoldAmount (Hi-Lo) }
* Source outcome: no accounting backend exists yet. Keep
* this as a disabled future stub until bindery-backed or
* libdirectory-backed account properties and hold records
* exist.
* Future owner: accounting provider, with possible print
* queue integration for page/job charging.
*/
}
break;
case 0x97: { /* Submit Account Charge */
/*
* SDK 23/151 / wire 0x97 Submit Account Charge.
* NetWare Server: 2.x, 3.x, 4.x, 5.x.
* Request payload after SubFunctionCode:
* long ChargeAmount (Hi-Lo)
* long HoldCancelAmount (Hi-Lo)
* word ServiceType (Hi-Lo)
* word ClientType (Hi-Lo)
* word CommentType (Hi-Lo)
* byte ClientNameLen
* byte ClientName[ClientNameLen]
* byte CommentLen
* byte Comment[CommentLen]
* Reply: no data. Completion reports accounting result.
* Source outcome: no accounting charge/audit-file writer is
* present. Keep disabled; do not fake success because print
* servers use this to charge completed work.
*/
}
break;
case 0x98: { /* Submit Account Hold */
/*
* SDK 23/152 / wire 0x98 Submit Account Hold.
* NetWare Server: 2.x, 3.x, 4.x, 5.x.
* Request payload after SubFunctionCode:
* long Amount (Hi-Lo)
* word ClientType (Hi-Lo)
* byte ClientNameLen
* byte ClientName[ClientNameLen]
* Reply: no data. Completion reports accounting result.
* Source outcome: no ACCOUNT_HOLDS storage/update logic is
* present. Keep disabled until an accounting provider can
* update holds atomically with account balance checks.
*/
}
break;
case 0x99: { /* Submit Account Note */
/*
* SDK 23/153 / wire 0x99 Submit Account Note.
* NetWare Server: 2.x, 3.x, 4.x, 5.x.
* Request payload after SubFunctionCode:
* word ServiceType (Hi-Lo)
* word ClientType (Hi-Lo)
* word CommentType (Hi-Lo)
* byte ClientNameLen
* byte ClientName[ClientNameLen]
* byte CommentLen
* byte Comment[CommentLen]
* Reply: no data.
* Source outcome: no NET$ACCT.DAT/audit-note writer exists
* yet. Keep disabled until the accounting provider defines
* durable note/audit behavior.
*/
}
break;
#endif
case 0x73: /* abort servicing queue job (old) */
case 0x84: { /* abort servicing queue job */
/*