Fix creation of Secret Service items in auth-source

* lisp/auth-source.el (auth-source-secrets-create): Use ´apply'.
(auth-source-secrets-saver): Handle `auth-source-save-behavior'
equal t.

* lisp/net/secrets.el (secrets-get-items): Do not call
`secrets-open-session' here ...
(top): ... but here.

* test/lisp/auth-source-tests.el
(auth-source-test-secrets-create-secret): Bind
`auth-source-save-behavior' to t.  Cleanup.

* test/lisp/net/secrets-tests.el (secrets-test00-availability):
After loading secets.el, a session is already opened.
(secrets-test02-collections, secrets-test03-items)
(secrets-test04-search): Open a new session.
This commit is contained in:
Michael Albinus 2018-05-16 11:22:51 +02:00
parent 4c3cd27df9
commit 01120ec3d2
4 changed files with 23 additions and 6 deletions

View file

@ -1733,7 +1733,7 @@ authentication tokens:
(secret (plist-get artificial :secret))
(secret (if (functionp secret) (funcall secret) secret)))
(lambda ()
(apply 'auth-source-secrets-saver collection item secret args))))
(auth-source-secrets-saver collection item secret args))))
(list artificial)))
@ -1742,8 +1742,9 @@ authentication tokens:
Respects `auth-source-save-behavior'."
(let ((prompt (format "Save auth info to secrets collection %s? " collection))
(done (not (eq auth-source-save-behavior 'ask)))
(doit (eq auth-source-save-behavior t))
(bufname "*auth-source Help*")
doit k)
k)
(while (not done)
(setq k (auth-source-read-char-choice prompt '(?y ?n ?N ??)))
(cl-case k

View file

@ -575,7 +575,6 @@ If successful, return the object path of the collection."
(defun secrets-get-items (collection-path)
"Return the object paths of all available items in COLLECTION-PATH."
(unless (secrets-empty-path collection-path)
(secrets-open-session)
(dbus-get-property
:session secrets-service collection-path
secrets-interface-collection "Items")))
@ -911,6 +910,8 @@ to their attributes."
(when (dbus-ping :session secrets-service 100)
(secrets-open-session)
;; We must reset all variables, when there is a new instance of the
;; "org.freedesktop.secrets" service.
(dbus-register-signal

View file

@ -292,6 +292,7 @@
;; The "session" collection is temporary for the lifetime of the
;; Emacs process. Therefore, we don't care to delete it.
(let ((auth-sources '((:source (:secrets "session"))))
(auth-source-save-behavior t)
(host (md5 (concat (prin1-to-string process-environment)
(current-time-string))))
(passwd (md5 (concat (prin1-to-string process-environment)
@ -315,7 +316,14 @@
(funcall auth-passwd)
auth-passwd))
(should (string-equal (plist-get auth-info :user) (user-login-name)))
(should (string-equal auth-passwd passwd))))
(should (string-equal (plist-get auth-info :host) host))
(should (string-equal auth-passwd passwd))
;; Cleanup.
;; Should use `auth-source-delete' when implemented for :secrets backend.
(secrets-delete-item
"session"
(format "%s@%s" (plist-get auth-info :user) (plist-get auth-info :host)))))
(provide 'auth-source-tests)
;;; auth-source-tests.el ends here

View file

@ -31,8 +31,9 @@
:expected-result (if secrets-enabled :passed :failed)
(should secrets-enabled)
(should (dbus-ping :session secrets-service))
;; We do not test when there's an open session.
(should (secrets-empty-path secrets-session-path)))
;; Exit.
(secrets--test-close-all-sessions))
(defun secrets--test-get-all-sessions ()
"Return all object paths for existing secrets sessions."
@ -88,6 +89,8 @@
(unwind-protect
(progn
(should (secrets-open-session))
;; There must be at least the collections "Login" and "session".
(should (member "Login" (secrets-list-collections)))
(should (member "session" (secrets-list-collections)))
@ -149,6 +152,8 @@
(unwind-protect
(let (item-path)
(should (secrets-open-session))
;; There shall be no items in the "session" collection.
(should-not (secrets-list-items "session"))
;; There shall be items in the "Login" collection.
@ -208,6 +213,8 @@
(unwind-protect
(progn
(should (secrets-open-session))
;; There shall be no items in the "session" collection.
(should-not (secrets-list-items "session"))