Skim v1.0.22 β "Ask the MX, not the vibes" π
The one where Skim stops pretending that Microsoft owns exactly four domains on the entire internet.
β¨ New
Work & school accounts are finally recognized. π’ If your company lives on Exchange Online, Skim now asks your domain's MX records who really hosts the mail. Everything Microsoft runs answers on *.protection.outlook.com, so the sign-in button that actually works shows up on its own β no more falling into the manual IMAP/SMTP form to guess hostnames that were never going to connect. (Yes, hotmail.de too. Sorry it took a whole minor version to notice Germany exists. π©πͺ)
Behind a mail gateway? Proofpoint and Mimecast tenants don't advertise Microsoft in MX at all, so unknown domains now get one quiet "Work or school account?" line instead of a shrug. One line. We counted. π
The DNS probe goes through the machine's own resolver (DnsQuery_W) β your domain never visits a third party, results are memoized, the whole thing is capped at 3 seconds, and if it fails the screen looks exactly like it did before. π
π Fixed
The connect screen no longer flashes the manual form for a split second before deciding what it actually wanted to show. Nobody liked that little strobe. πͺ©
Failed Microsoft sign-ins can now, revolutionarily, display an error. The error slot was living inside the password snippet, which is a great hiding spot if your goal is to never be seen. π
OAuth buttons stopped submitting the form because someone forgot type="button". Classic. π€¦
access_denied is no longer universally translated as "you cancelled". AADSTS65004 is a genuine decline; the rest of that family is your tenant's consent policy saying no on your behalf β and now it says that instead of blaming you. π
Fixes #33.
π§Ή Housekeeping
The MX walk now traverses the record list as NonNull instead of raw pointers, because CodeQL followed a null_mut() all the way into a dereference and made a very good point. π The null check now lives in the type, each unsafe block vouches for exactly one operation, and behavior is unchanged β verified against a real tenant domain, a country consumer domain, a Google-hosted domain, and an NXDOMAIN that politely refused to exist.
Eleven locales got their new strings. π
Get it here: https://github.com/nikserg/skim/releases/tag/v1.0.22


Replies
The distinction between AADSTS65004 and the other consent errors is one of those tiny fixes users probably wont notice until it saves them from troubleshooting the wrong problem.
I like that the DNS probe stays local. email setup is already sensitive enough without sending someones domain to another service just to figure out who hosts it.
That OAuth type="button" bug is painfully relatable. one tiny missing attribute and suddenly the browser is doing something completely different from what you intended.