From f1e88ab88dfda1914fe706df7b7d3f1ec072ea0a Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Tue, 2 Jun 2026 16:34:07 +0000 Subject: [PATCH] docs: audit accounting endpoint stubs --- AI.md | 15 +++++++++ REDESIGN.md | 5 ++- TODO.md | 14 ++++++--- src/nwbind.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 117 insertions(+), 5 deletions(-) diff --git a/AI.md b/AI.md index abb9d8c..b1f05f6 100644 --- a/AI.md +++ b/AI.md @@ -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`. diff --git a/REDESIGN.md b/REDESIGN.md index f485c03..71a3302 100644 --- a/REDESIGN.md +++ b/REDESIGN.md @@ -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 diff --git a/TODO.md b/TODO.md index b2d4778..4ec6cb7 100644 --- a/TODO.md +++ b/TODO.md @@ -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`: diff --git a/src/nwbind.c b/src/nwbind.c index f243fd0..52764e5 100644 --- a/src/nwbind.c +++ b/src/nwbind.c @@ -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 */ /*