]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix creation of Secret Service items in auth-source
authorMichael Albinus <michael.albinus@gmx.de>
Wed, 16 May 2018 09:22:51 +0000 (11:22 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Wed, 16 May 2018 09:22:51 +0000 (11:22 +0200)
* 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.

lisp/auth-source.el
lisp/net/secrets.el
test/lisp/auth-source-tests.el
test/lisp/net/secrets-tests.el

index 8b54c8118d28cef54aa0db6d927908d9fc5e51c1..918d785eaef52e71b8e8b630590f330df377ad92 100644 (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
index 22a4e8c7b0ae70c95cebe5a6e220188ec307b893..45c98cae60d6b2ec708b88dc2f59b30e00ec6f5a 100644 (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
index 2f5a9320b17a061ecc28d117f40200bb6afd49ab..1f6737cb7c8dbc1f9996a4faeb2e59bc25d00d47 100644 (file)
   ;; 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)
                          (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
index fcc3a2d3e6e32a1f8104232b554c54329f4ba4ef..9a61bca4351c9d6b136b0e457abfca9ef8730dcb 100644 (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)))
 
   (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.
 
   (unwind-protect
       (progn
+       (should (secrets-open-session))
+
        ;; There shall be no items in the "session" collection.
        (should-not (secrets-list-items "session"))