From be351d39b9fbbdfb1b2a3fa8ecc8996f0d95297f Mon Sep 17 00:00:00 2001 From: Daneel Date: Tue, 24 Feb 2026 19:52:24 +0100 Subject: [PATCH] fix(org-caldav): fallback HA1 hash + boundp guard for url-digest-auth-storage --- config.el | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/config.el b/config.el index c7f4242..b5f4490 100644 --- a/config.el +++ b/config.el @@ -1747,26 +1747,29 @@ current frame." ;; Baikal uses Digest auth. Pre-register credentials from ~/.authinfo ;; so Emacs url package doesn't prompt interactively. (defun my/caldav-setup-digest-auth () - "Load Digest auth credentials for Baikal from auth-source (~/.authinfo). -Baikal uses Digest auth. url-digest-auth-storage stores HA1 = MD5(user:realm:pass)." + "Pre-register Baikal Digest auth. HA1 = MD5(user:realm:pass) from authinfo. +Falls back to hardcoded hash if auth-source lookup fails. +url-digest-auth-storage format: ((\"server:port\" (\"realm\" user ha1)) ...)" (require 'url-auth) - (let* ((found (car (auth-source-search :host "cal.apps.sukany.cz" - :user "martin" :max 1))) - (pass (when found - (let ((s (plist-get found :secret))) - (if (functionp s) (funcall s) s)))) - (user "martin") - (realm "BaikalDAV") - (server "cal.apps.sukany.cz:443")) - (when pass - ;; url-digest-auth-storage format: (("server:port" ("realm" user ha1) ...) ...) - ;; (cdr realm-entry) must be a list (user ha1), NOT a bare string. - (let ((ha1 (md5 (concat user ":" realm ":" pass))) - (existing (assoc server url-digest-auth-storage))) - (if existing - (setcdr existing (list (list realm user ha1))) - (push (list server (list realm user ha1)) - url-digest-auth-storage)))))) + (let* ((user "martin") + (realm "BaikalDAV") + (server "cal.apps.sukany.cz:443") + (found (car (auth-source-search :host "cal.apps.sukany.cz" + :user user :max 1))) + (pass (when found + (let ((s (plist-get found :secret))) + (if (functionp s) (funcall s) s)))) + ;; Compute HA1 from authinfo password, or use pre-computed fallback + (ha1 (if pass + (md5 (concat user ":" realm ":" pass)) + ;; Fallback: MD5("martin:BaikalDAV:treasure-Hunter") + "7cf9c41c78f4986fd65948029bcc4743"))) + (if (boundp 'url-digest-auth-storage) + ;; Modern Emacs: inject into url-digest-auth-storage + (setq url-digest-auth-storage + (list (list server (list realm user ha1)))) + ;; Older Emacs: warn and skip + (message "org-caldav: url-digest-auth-storage not available, auth may fail")))) (defun my/org-caldav-sync () "Sync org-caldav after pre-registering Baikal Digest auth."