We want to deprecate and eventually remove the XML-RPC interface in favor of JSON-RPC. The ipa-join command is currently implemented in C and uses libxmlrpc-client to talk to IPA servers. It's the last command that requires XML-RCP API and libxmlrpc-client in the FreeIPA sources tree. AFAIK only certmonger and ipa-join depend on XML-RCP at all.
ipa-join
certmonger
Rather than re-implementing the XML-RPC part of ipa-join.c with some JSON-RPC library, it is probably easier and less risky to replace the implementation with a pure Python implementation. The command is not terribly complicated:
ipa-join.c
fqdn=$HOSTNAME,cn=computers,cn=accounts,$SUFFIX
join
host_disable
ipa-getkeytab
As a side note on the Certmonger situation - seems like a good opportunity to reimplement the IPA renewal helper and take control of it from Certmonger (perhaps shipping it as a separate package on its own release cadence, or perhaps part of ipa-client).
Alexander mentioned that he would rather replace libxmlrpc-client with a JSON RPC C-library than to reimplement ipa-join in Python.
[WIP] https://github.com/freeipa/freeipa/pull/3544
PR 3544 uses libjson-c. I would rather use jansson than libjson-c. Nathaniel is using the library in libjose and I very much enjoined using it. jansson has a high level formatting and parsing API that works similar to Python's high level C API for parsing and building complex objects. jansson is available in Fedora and RHEL.
Example:
json_unpack(jsonobj, "{s:s, s:i}", "key1", &s, "key2", &i);
master:
Metadata Update from @abbra: - Issue close_status updated to: fixed - Issue status updated to: Closed (was: Open)
Metadata Update from @abbra: - Custom field changelog adjusted to ipa-join tool defaults to use of JSON-RPC protocol when communicating to IPA masters by default. The choice of JSON-RPC or XML-RPC is a compile-time setting now.