You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 4f0129e
Browse filesBrowse the repository at this point in the historyBrowse files
user accounts pages: show every table column in full
Wide tables break out of the 900px text column to the window width (up to
1600px) instead of clipping, long code in cells wraps, short code tokens
stay on one line, and long inline code and code blocks wrap on phones.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
<pclass="footnote">Option A of the NextBSD user-accounts epic. Companion options cover other shapes for the same seven requirements. Planning only; no code compiled. Items marked inferred should be checked in source before a ticket is cut.</p>
<pclass="footnote">Everything attributed to Gershwin or FreeBSD above was read in source at the stated revisions. The launchd <code>Sockets</code> check-in behaviour, the plist file mode, and the NFS-under-launchd claims are inferred and are phase 0/1 tests. No NextBSD machine ran any of this. Written 2026-09-21.</p>
<pclass="footnote">Verified: everything cited with a file and line above was read in the cloned trees; tag contents, commit dates and the missing lookupd repo were checked against GitHub; FreeBSD statements come from the linked man pages and commit. Inferred, and marked as such in the text: DHCP-driven binding, Apple’s slapd back-netinfo bridge, whether Apple ever built these servers LP64, the exact wrapper command names, and all effort figures.</p>
@@ -81,12 +92,12 @@ <h2 id="reqs">1. The requirements</h2>
81
92
<p>The epic also vendors sudo and zsh into nextbsd-userland. All three docs checked the licences. sudo is ISC-style. zsh is MIT-style, but some files under <code>Functions/</code> are GPL and must be left out. Both are fine for base whichever option is chosen.</p>
<tr><td><strong>A</strong></td><td><ahref="nextbsd-ua-directoryservice-port.html">Port Apple DirectoryService</a></td><td>This is the real Mac OS X 10.5/10.6 client architecture. It means 151,601 lines of 2011 C++ against Apple frameworks we only partly have. The daemon and its plugins are open, as are Apple’s OpenLDAP and Kerberos builds. The setup tool <code>slapconfig</code>, the PasswordService daemon and Server Admin were not, so <code>promote</code> is new code either way (§4).</td></tr>
87
98
<tr><td><strong>B</strong></td><td><ahref="nextbsd-ua-gershwin-ds-redesign.html">Gershwin DirectoryServices in C/CF</a></td><td>This is the shape and commands you already like, in about 7–8k lines. It is the fastest route to all seven requirements. Today’s Gershwin code has serious security holes that the redesign has to fix.</td></tr>
88
99
<tr><td><strong>C</strong></td><td><ahref="nextbsd-ua-netinfo-port.html">Port NetInfo</a></td><td>This is the authentic NeXT and 10.0–10.4 stack, and it meets every requirement mechanically. It is insecure by design: every password hash is readable without authenticating, and trust is based on IP address. Hardening it removes the only reason to choose it.</td></tr>
<tr><td>0. Vendoring</td><td>sudo and zsh into nextbsd-userland; <code>/etc/shells</code>, <code>/etc/zshrc</code>, <code>sudoers.d/nextbsd</code> with <code>%admin ALL=(ALL) ALL</code></td><td>1–2 weeks</td><td><code>/bin/zsh</code> and <code>/usr/bin/sudo</code> are in the image</td></tr>
758
769
<tr><td>1. Local directory</td><td><code>dsd</code> (launchd <code>org.nextbsd.dsd</code>, Mach name <code>org.nextbsd.ds</code>), <code>libds</code>, per-record store with Apple attribute names, root-only shadow hashes, <code>nss_ds</code>, <code>pam_ds</code> with <code>allow_nopass</code> for sudo only, and <code>dscli user|group|passwd</code></td><td>3–4 weeks</td><td>An admin is created in <code>/Local/Users</code> with zsh; sudo prompts only if a password is set; <code>/etc/passwd</code> holds only system users</td></tr>
759
770
<tr><td>2. Base tool integration</td><td><code>adduser</code>, <code>pw</code>, <code>vipw</code> and <code>chpass</code> either call <code>dscli</code> or refuse for UIDs ≥ 500; the installer and LoginWindow use <code>libds</code>; migration from existing <code>master.passwd</code> users</td><td>1–2 weeks</td><td>No base tool can create a human user outside the directory</td></tr>
760
771
<tr><td>3. NextBSD network</td><td><code>dscli promote</code> and <code>dscli join</code> over TLS with certificate pinning, Bonjour <code>_nextbsd-ds._tcp</code>, NFS <code>/Network/Users</code> mounted at join and at boot, network applications at <code>/Network/Applications</code></td><td>3–4 weeks</td><td>A second VM joins and a network user logs in with a <code>/Network/Users</code> home</td></tr>
761
772
<tr><td>4. Open Directory shape</td><td>Promote also sets up OpenLDAP with Apple’s schema and an MIT Kerberos realm; join can bind to any LDAP/Kerberos server; a Mac bind test</td><td>4–6 weeks</td><td>A real Mac binds to a NextBSD server, and NextBSD binds to an LDAP server</td></tr>
762
-
</table>
773
+
</table></div>
763
774
<p>That totals about 3–4 months for one engineer, against 9–12 months for option A. Phase 4 can move to its own epic if you want the shipping line drawn at phase 3.</p>
764
775
765
776
<h2id="open">11. Open decisions</h2>
@@ -773,5 +784,6 @@ <h2 id="open">11. Open decisions</h2>
773
784
774
785
<pclass="footnote">Design docs: <ahref="nextbsd-ua-directoryservice-port.html">A: Apple DirectoryService</a> · <ahref="nextbsd-ua-gershwin-ds-redesign.html">B: Gershwin DirectoryServices in C/CF</a> · <ahref="nextbsd-ua-netinfo-port.html">C: NetInfo</a>. Background: <ahref="nextbsd-opendirectory-research.html">Directory services before opendirectoryd</a> and the earlier <ahref="nextbsd-directoryservices-plan.html">directoryservicesd porting plan</a>, which this spike supersedes for the account-management epic.</p>
0 commit comments