[GH-ISSUE #34] Reverse engineer oamshim and ServerControl frameworks for bootp-1 #25

Open
opened 2026-11-03 22:02:31 -07:00 by gitea-mirror · 0 comments
Owner

Originally created by @raynorpat on GitHub (Oct 2, 2026).
Original GitHub issue: https://github.com/RhapsodiOS/RhapsodiOS/issues/34

Summary

Reverse engineer and add the missing oamshim.framework and ServerControl.framework interfaces/implementations needed by src/bootp-1, so the BOOTP clients and daemon can build.

The project Makefiles link both frameworks. The DR2 guest has neither in /System/Library/PrivateFrameworks, and the docket identifies no source for them in this tree.

Blocked targets

  • bootplib and bootpd.tproj depend on oamshim.framework.
  • bootplib's PowerPC sharepoints.c also depends on ServerControl.framework.
  • These missing frameworks block /usr/sbin/bootpc on PowerPC and /usr/libexec/bootpd on both CPUs according to the docket; bootplib/bootpd also have architecture-specific source gaps described below.

Required API surface

oamshim.framework

Headers imported by bootp-1: oamshim/MacTypes.h, oamshim/OAMTypes.h, oamshim/OAM.h, and oamshim/AppleShareRegistry.h.

The daemon uses the OAM session/object operations OAMInitialize, OAMOpenSession, OAMCloseSession, OAMCreateObject, OAMDeleteObject, OAMGetAttribute, OAMSetAttribute, OAMAddGroupMember, and OAMRemoveGroupMember. It depends on OAMStatus, OAMSessionID, OAMType, OAMShortObjectSpec, OAMObjectSpec, and OAMAttributeDescriptor, plus the user/group/basic object types, name/short-ID spec types, password/internet-name/user-flags attributes, login flags, and duplicate-object status. The detailed field and constant list is in docs/reverse-engineering-docket.md.

The OAM-backed afpuser.c is compiled on both CPUs, so the implementation must support both architectures.

ServerControl.framework

The PowerPC share-point code imports ServerControl/ServerControlAPI.h and uses AddSharePoint, CreateSharePointIter, GetNextSharePoint, GetSharePointAttribute, and DeleteSharePointIter, with SharePointSpec, SharePointInfo, iterator/reference types, and the AFP/share-point constants. Determine and document which declarations belong in ServerControl versus AppleShareRegistry.h based on reference binaries.

Acceptance criteria

  • Reconstruct the needed headers and framework symbols from Mac OS X Server 1.0–1.2v3 reference binaries, documenting any behavior inferred where binaries or evidence are incomplete.
  • Add the framework sources/build integration to the repository for i386 and PowerPC where required.
  • Build the relevant bootp-1 targets with those frameworks available, resolving the link failures attributable to these dependencies.
  • Keep the unrelated packaging/header work (manifest inclusion, libinfo-hdrs, arpa/nameser.h, and the HFS glue / -lVDI-interface gaps) tracked separately; those are listed in the docket as additional blockers, not framework reverse-engineering work.

See docs/reverse-engineering-docket.md for the API inventory, build results, and dependency context.

Originally created by @raynorpat on GitHub (Oct 2, 2026). Original GitHub issue: https://github.com/RhapsodiOS/RhapsodiOS/issues/34 ## Summary Reverse engineer and add the missing `oamshim.framework` and `ServerControl.framework` interfaces/implementations needed by `src/bootp-1`, so the BOOTP clients and daemon can build. The project Makefiles link both frameworks. The DR2 guest has neither in `/System/Library/PrivateFrameworks`, and the docket identifies no source for them in this tree. ## Blocked targets - `bootplib` and `bootpd.tproj` depend on `oamshim.framework`. - `bootplib`'s PowerPC `sharepoints.c` also depends on `ServerControl.framework`. - These missing frameworks block `/usr/sbin/bootpc` on PowerPC and `/usr/libexec/bootpd` on both CPUs according to the docket; `bootplib`/`bootpd` also have architecture-specific source gaps described below. ## Required API surface ### `oamshim.framework` Headers imported by `bootp-1`: `oamshim/MacTypes.h`, `oamshim/OAMTypes.h`, `oamshim/OAM.h`, and `oamshim/AppleShareRegistry.h`. The daemon uses the OAM session/object operations `OAMInitialize`, `OAMOpenSession`, `OAMCloseSession`, `OAMCreateObject`, `OAMDeleteObject`, `OAMGetAttribute`, `OAMSetAttribute`, `OAMAddGroupMember`, and `OAMRemoveGroupMember`. It depends on `OAMStatus`, `OAMSessionID`, `OAMType`, `OAMShortObjectSpec`, `OAMObjectSpec`, and `OAMAttributeDescriptor`, plus the user/group/basic object types, name/short-ID spec types, password/internet-name/user-flags attributes, login flags, and duplicate-object status. The detailed field and constant list is in `docs/reverse-engineering-docket.md`. The OAM-backed `afpuser.c` is compiled on both CPUs, so the implementation must support both architectures. ### `ServerControl.framework` The PowerPC share-point code imports `ServerControl/ServerControlAPI.h` and uses `AddSharePoint`, `CreateSharePointIter`, `GetNextSharePoint`, `GetSharePointAttribute`, and `DeleteSharePointIter`, with `SharePointSpec`, `SharePointInfo`, iterator/reference types, and the AFP/share-point constants. Determine and document which declarations belong in ServerControl versus `AppleShareRegistry.h` based on reference binaries. ## Acceptance criteria - Reconstruct the needed headers and framework symbols from Mac OS X Server 1.0–1.2v3 reference binaries, documenting any behavior inferred where binaries or evidence are incomplete. - Add the framework sources/build integration to the repository for i386 and PowerPC where required. - Build the relevant `bootp-1` targets with those frameworks available, resolving the link failures attributable to these dependencies. - Keep the unrelated packaging/header work (manifest inclusion, `libinfo-hdrs`, `arpa/nameser.h`, and the HFS glue / `-lVDI-interface` gaps) tracked separately; those are listed in the docket as additional blockers, not framework reverse-engineering work. See [`docs/reverse-engineering-docket.md`](../blob/master/docs/reverse-engineering-docket.md) for the API inventory, build results, and dependency context.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
github-starred/RhapsodiOS#25
No description provided.