Repository navigation
Add an Elixir service client - #830
Merged
Merged
Conversation
KavanPrice
force-pushed
the
feature/ex-service-client
branch
from
October 20, 2026 17:05
9f35c05 to
ea5f58d
Compare
Start lib/ex-sparkplug, the Sparkplug B library the Elixir service client will build on. Vendor Eclipse Tahu's sparkplug_b.proto and commit the protox-generated modules, so builds don't need protoc. Pin Elixir 1.20.4 and OTP 29.1.2.
The Elixir service client needs Kerberos and GSS-API, and kerlberos is the only maintained pure-Erlang implementation. Upstream 2.0.3 can't log in to the ACS KDC, so keep an in-tree fork. This commit is the Hex package unchanged; the patches follow separately so they stay visible. FORK.md records where it came from and why.
The ACS KDC doesn't require pre-authentication, so it answers kerlberos's probe with a ticket, which crashed probe/3. Take the etype and salt from that reply and authenticate with pre-authentication as usual. Add keytab login, since ACS services have random keys and no passwords. A keytab without the KDC's etype is an error result rather than a crash, as a crash report would include the keytab.
kerlberos only used lager for debug messages, but starting it started lager, which wrote log/console.log, log/error.log and log/crash.log into the working directory of every service using the client. By default it also captured OTP crash reports, which can hold passwords and keytab keys, into crash.log. Log with ?LOG_DEBUG instead, drop lager and goldrush, and stop one acceptor message logging the keytab's keys.
KavanPrice
force-pushed
the
feature/ex-service-client
branch
from
October 20, 2026 21:23
ea5f58d to
01da30f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds an Elixir service client in-tree for building Elixir applications in or against ACS.
lib/ex-sparkplug: Sparkplug B decoding, topics and host application state, tested against Tahu JS fixtureslib/ex-service-client: Kerberos credentials, MQTT, HTTP (Directory, Command Escalation) and one child spec configured from the environmentlib/erl-kerlberos: an in-tree fork of kerlberos with seven patches; seeFORK.md, including a mutual-authentication fixCLAUDE.md: Elixir code style; CI forlib/ex-*