bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#15520: 24.3; secrets.el secrets-create-item has wrong dbus arguments


From: Nicolas Petton
Subject: bug#15520: 24.3; secrets.el secrets-create-item has wrong dbus arguments (fix included)
Date: Wed, 02 Oct 2013 19:20:06 +0200

In secrets.el, secrets-create-item has the wrong label property for the
created item, and the secret struct is not built correctly.

Here's a new version that fixes the issue.


(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\"\)

The object path of the created item is returned."
  (unless (member item (secrets-list-items collection))
    (let ((collection-path (secrets-unlock-collection collection))
          result props)
      (unless (secrets-empty-path collection-path)
        ;; Create attributes list.
        (while (consp (cdr attributes))
          (unless (keywordp (car attributes))
            (error 'wrong-type-argument (car attributes)))
          (setq props (add-to-list
                       'props
                       (list :dict-entry
                             (substring (symbol-name (car attributes)) 1)
                             (cadr attributes))
                       'append)
                attributes (cddr attributes)))
        ;; Create the item.
        (setq result
              (dbus-call-method
               :session secrets-service collection-path
               secrets-interface-collection "CreateItem"
               ;; Properties.
               (append
                `(:array
                  (:dict-entry "org.freedesktop.Secret.Item.Label" (:variant 
,item)))
                (when props
                  `((:dict-entry
                     "org.freedesktop.Secret.Item.Attributes" (:variant ,(append
'(:array) props))))))
               ;; Secret.
               `(:struct :object-path ,secrets-session-path
                         ,(dbus-string-to-byte-array "")
                         ,(dbus-string-to-byte-array password)
                         "text/plain")
               ;; Do not replace. Replace does not seem to work.
               nil))
        (secrets-prompt (cadr result))
        ;; Return the object path.
        (car result)))))






reply via email to

[Prev in Thread] Current Thread [Next in Thread]