diff options
author | Ken Raeburn <raeburn@raeburn.org> | 2015-11-01 01:42:21 -0400 |
---|---|---|
committer | Ken Raeburn <raeburn@raeburn.org> | 2015-11-01 01:42:21 -0400 |
commit | 39372e1a1032521be74575bb06f95a3898fbae30 (patch) | |
tree | 754bd242a23d2358ea116126fcb0a629947bd9ec /lisp/net/secrets.el | |
parent | 6a3121904d76e3b2f63007341d48c5c1af55de80 (diff) | |
parent | e11aaee266da52937a3a031cb108fe13f68958c3 (diff) | |
download | emacs-39372e1a1032521be74575bb06f95a3898fbae30.tar.gz |
merge from trunk
Diffstat (limited to 'lisp/net/secrets.el')
-rw-r--r-- | lisp/net/secrets.el | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/lisp/net/secrets.el b/lisp/net/secrets.el index b4e51348dde..5e0274029f1 100644 --- a/lisp/net/secrets.el +++ b/lisp/net/secrets.el @@ -1,6 +1,6 @@ ;;; secrets.el --- Client interface to gnome-keyring and kwallet. -;; Copyright (C) 2010-2013 Free Software Foundation, Inc. +;; Copyright (C) 2010-2015 Free Software Foundation, Inc. ;; Author: Michael Albinus <michael.albinus@gmx.de> ;; Keywords: comm password passphrase @@ -85,7 +85,7 @@ ;; temporarily. This shall be preferred over creation of a persistent ;; collection, when the information shall not live longer than Emacs. ;; The session collection can be addressed either by the string -;; "session", or by `nil', whenever a collection parameter is needed. +;; "session", or by nil, whenever a collection parameter is needed. ;; As already said, a collection is a group of secret items. A secret ;; item has a label, the "secret" (which is a string), and a set of @@ -189,6 +189,7 @@ It returns t if not." ;; </method> ;; <method name="CreateCollection"> ;; <arg name="props" type="a{sv}" direction="in"/> +;; <arg name="alias" type="s" direction="in"/> ;; Added 2011/3/1 ;; <arg name="collection" type="o" direction="out"/> ;; <arg name="prompt" type="o" direction="out"/> ;; </method> @@ -417,7 +418,7 @@ returned, and it will be stored in `secrets-session-path'." (defun secrets-prompt-handler (&rest args) "Handler for signals emitted by `secrets-interface-prompt'." ;; An empty object path is always identified as `secrets-empty-path' - ;; or `nil'. Either we set it explicitly, or it is returned by the + ;; or nil. Either we set it explicitly, or it is returned by the ;; "Completed" signal. (if (car args) ;; dismissed (setq secrets-prompt-signal (list secrets-empty-path)) @@ -491,9 +492,10 @@ If there is no such COLLECTION, return nil." (secrets-get-collection-property collection-path "Label")) (throw 'collection-found collection-path)))))) -(defun secrets-create-collection (collection) +(defun secrets-create-collection (collection &optional alias) "Create collection labeled COLLECTION if it doesn't exist. -Return the D-Bus object path for collection." +Set ALIAS as alias of the collection. Return the D-Bus object +path for collection." (let ((collection-path (secrets-collection-path collection))) ;; Create the collection. (when (secrets-empty-path collection-path) @@ -504,7 +506,10 @@ Return the D-Bus object path for collection." (dbus-call-method :session secrets-service secrets-path secrets-interface-service "CreateCollection" - `(:array (:dict-entry "Label" (:variant ,collection)))))))) + `(:array + (:dict-entry ,(concat secrets-interface-collection ".Label") + (:variant ,collection))) + (or alias "")))))) ;; Return object path of the collection. collection-path)) @@ -593,10 +598,9 @@ If successful, return the object path of the collection." ATTRIBUTES are key-value pairs. The keys are keyword symbols, starting with a colon. Example: - \(secrets-create-item \"Tramp collection\" \"item\" \"geheim\" - :method \"sudo\" :user \"joe\" :host \"remote-host\"\) + (secrets-search-items \"Tramp collection\" :user \"joe\") -The object paths of the found items are returned as list." +The object labels of the found items are returned as list." (let ((collection-path (secrets-unlock-collection collection)) result props) (unless (secrets-empty-path collection-path) @@ -604,6 +608,8 @@ The object paths of the found items are returned as list." (while (consp (cdr attributes)) (unless (keywordp (car attributes)) (error 'wrong-type-argument (car attributes))) + (unless (stringp (cadr attributes)) + (error 'wrong-type-argument (cadr attributes))) (setq props (add-to-list 'props (list :dict-entry @@ -611,8 +617,7 @@ The object paths of the found items are returned as list." (cadr attributes)) 'append) attributes (cddr attributes))) - ;; Search. The result is a list of two lists, the object paths - ;; of the unlocked and the locked items. + ;; Search. The result is a list of object paths. (setq result (dbus-call-method :session secrets-service collection-path @@ -623,15 +628,15 @@ The object paths of the found items are returned as list." ;; Return the found items. (mapcar (lambda (item-path) (secrets-get-item-property item-path "Label")) - (append (car result) (cadr result)))))) + result)))) (defun secrets-create-item (collection item password &rest attributes) "Create a new item in COLLECTION with label ITEM and password PASSWORD. ATTRIBUTES are key-value pairs set for the created item. The keys are keyword symbols, starting with a colon. Example: - \(secrets-create-item \"Tramp collection\" \"item\" \"geheim\" - :method \"sudo\" :user \"joe\" :host \"remote-host\"\) + (secrets-create-item \"Tramp collection\" \"item\" \"geheim\" + :method \"sudo\" :user \"joe\" :host \"remote-host\") The object path of the created item is returned." (unless (member item (secrets-list-items collection)) @@ -642,6 +647,8 @@ The object path of the created item is returned." (while (consp (cdr attributes)) (unless (keywordp (car attributes)) (error 'wrong-type-argument (car attributes))) + (unless (stringp (cadr attributes)) + (error 'wrong-type-argument (cadr attributes))) (setq props (add-to-list 'props (list :dict-entry @@ -693,7 +700,7 @@ If there is no such item, return nil." (let ((item-path (secrets-item-path collection item))) (unless (secrets-empty-path item-path) (dbus-byte-array-to-string - (cl-caddr + (nth 2 (dbus-call-method :session secrets-service item-path secrets-interface-item "GetSecret" :object-path secrets-session-path)))))) |