4 minutes
Announcing Sandogasa, a set of Rust crates to help with Fedora packaging workflows
Caveat lector
This post discusses tools reluctantly written with AI assistance. If you don’t entertain using them under any circumstance, and think even reading about them legally compromise your ability to reimplement them yourselves, stop reading now
I’ve spent the past few weeks of having to use LLMs to scratch some long-standing itches that, unfortunately, no one in the community has had the time to solve programmatically.
fedora-cve-triage
It started off with fedora-cve-triage, written to address the issue that a lot of CVE bugs filed against Fedora packages are badly attributed, and there is a lack of automation for handling issues filed against CVEs that have been addressed in a software update but failed to reference said issue.
Sure, these should be addressed during the filing process, ideally, but as they say:
`The best time to plant a tree was 20 years ago
The second best time is now`
This tool is single-handedly responsible for triaging the issues linked here: CVE-FalsePositive-Unshipped, CVE-AlreadyFixed, and CVE-FalsePositive-CrossEcosystem - hopefully as I add more detectors and run this periodically it will help the team that is filing the bug recognize what major pain points packagers at the other end are seeing.
$ fedora-cve-triage js-fps -f configs/js-fps-folly-stack.toml --close-bugs
Checking 3 CVE bugs for JavaScript false positives...
FP: bug 2418496 — CVE-2025-13466 cachelib: body-parser denial of service [epel-9]
...
This will close 3 bug(s) as NOTABUG and mark them as blocking CVE-FalsePositive-Unshipped.
Proceed? [y/N] y
Closed 3 bug(s).
$ fedora-cve-triage bodhi-check -f configs/bodhi-check-freerdp.toml --close-bugs
...
This will close 2 bug(s) as ERRATA and mark 1 late-filed bug(s) as blocking CVE-AlreadyFixed.
Proceed? [y/N] y
Closed 2 bug(s) as ERRATA (freerdp-3.23.0-1.fc42)
Marked 1 bug(s) as blocking CVE-AlreadyFixed (late-filed)
$ fedora-cve-triage cross-ecosystem -f configs/cross-ecosystem.toml
Checking 1 CVE bugs for cross-ecosystem false positives...
FP: bug 2428370 — CVE-2025-14505 rust-elliptic-curve: Key handling flaws in Elliptic [fedora-43]
1 likely false positive(s) found.
sandogasa-pkg-acl
A lot of times packages are maintained by a de facto group but there is no formal SIG attached, and it can be a pain to manually adjust the ACL on these (e.g. some people leave, or new packages get added - see e.g. how Python interpreters, Django, and all the Python packages in the Mailman stack that does not have a formal SIG yet.
sandogasa-pkg-acl lets you show, set, remove, and batch apply ACLs, e.g.
$ sandogasa-pkg-acl show freerdp
Package: freerdp
Users:
ngompa: owner
salimma: admin
dcavalca: commit
Groups:
kde-sig: commit
Your access (salimma): admin
$ sandogasa-pkg-acl apply acls.toml freerdp librdp
Set user 'ngompa' to 'admin' on freerdp
Set user 'salimma' to 'commit' on freerdp
Removed user 'olduser' from freerdp
Set group 'kde-sig' to 'commit' on freerdp
Removed group 'old-group' from freerdp
Set user 'ngompa' to 'admin' on librdp
or even give a package away
$ sandogasa-pkg-acl give dcavalca freerdp librdp
Gave freerdp to 'dcavalca'
Gave librdp to 'dcavalca'
sandogasa-hattrack
I’m a big fan of the old fedora-active-user tool that pingou wrote. Unfortunately it basically has not seen any update recently (I see I have the last bugfix commit - five years ago!) and since then Fedora has added more online services like the Fedora Discussions Discourse instance.
In discussions (ha!) on Discourse and Matrix with mattdm, our then Fedora Project Leader, I remember discussing how nobody uses the Fedora vacation calendar anymore (surprise! It’s still a thing) - and in unrelated discussion with some people, some raised privacy concern about stating beforehand that they will be away for a given period of time.
Behold, sandogasa-hattrack:
$ sandogasa-hattrack last-seen salimma
Last seen: salimma
Dist-git 2026-03-20T23:59:59+00:00 (3 days ago)
last active on 2026-03-20
Bodhi 2026-03-20T23:44:44+00:00 (3 days ago)
last update submitted
Bugzilla 2026-03-20T15:14:06+00:00 (4 days ago)
#2449640 Tracker for invalid, cross-ecosystem CVE
Discourse 2026-03-18T10:51:27+00:00 (5 days ago)
last post
status: 🏖️ on vacation
expires: 2026-04-01 00:00 UTC (in 1 week)
Mailing lists 2026-03-13T09:58:20+00:00 (1 week ago)
Retiring python-sphinx-hoverxref
You can get more details by asking for bodhi, bugzilla, discourse, distgit, or mailman instead of last-seen. Status is not shown if the user does not set a custom status, and status expiration is also not shown if the user just select ’never’ for expiration.
The backing crates
Once I started on the second tool, it became obvious that surely the code should be shared between the two. Things snowballed and now there are 8 library crates; they are all published individually on crates.io.
Feedback time
Let me know if this is useful to you or if you have requests for improvement or bugfixes! The issue tracker is up and there are tags for specific tools, though not for the shared library crates just yet.
Hopefully this scratches some other people’s itches and not just mine.
This post is day 33 of my #100DaysToOffload challenge. Visit https://100daystooffload.com to get more info, or to get involved.
Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to ~michel-slm/public-inbox@lists.sr.ht [mailing list etiquette]
Posts are also tooted to @michelin@hachyderm.io or @michel_slm@social.coop
100DaysToOffload fedora foss llm package-management rust
826 Words
2026-03-24 19:06 (Last updated: 2026-03-24 00:00)
Comments
You can use your Mastodon account to reply to this post.