From 9abefce4368c03aa693bc082890e5f70bd9dab1d Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Thu, 13 Jun 2013 12:12:34 +0200 Subject: [PATCH] Implement changes in Secret Service API. Make it backward compatible. * net/secrets.el (secrets-struct-secret-content-type): New defonst. (secrets-create-item): Use it. Prefix properties with interface. --- lisp/ChangeLog | 6 +++++ lisp/net/secrets.el | 57 +++++++++++++++++++++++++++++---------------- 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b19601a7b52..2d9fd3f28b4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2013-06-13 Michael Albinus + + Implement changes in Secret Service API. Make it backward compatible. + * net/secrets.el (secrets-struct-secret-content-type): New defonst. + (secrets-create-item): Use it. Prefix properties with interface. + 2013-06-13 Michael Hoffman <9qobl2n02@sneakemail.com> (tiny change) * term.el (term-suppress-hard-newline): New option. (Bug#12017) diff --git a/lisp/net/secrets.el b/lisp/net/secrets.el index 9555cb41cfe..1951b195886 100644 --- a/lisp/net/secrets.el +++ b/lisp/net/secrets.el @@ -208,9 +208,9 @@ It returns t if not." ;; ;; ;; -;; -;; -;; +;; +;; +;; ;; ;; ;; @@ -234,7 +234,7 @@ It returns t if not." ;; ;; ;; -;; +;; ;; ;; ;; @@ -245,11 +245,11 @@ It returns t if not." ;; ;; ;; -;; -;; -;; -;; -;; +;; +;; +;; +;; +;; ;; ;; ;; @@ -293,11 +293,11 @@ It returns t if not." ;; ;; ;; -;; -;; +;; +;; ;; ;; -;; +;; ;; ;; ;; @@ -305,10 +305,22 @@ It returns t if not." ;; OBJECT PATH session ;; ARRAY BYTE parameters ;; ARRAY BYTE value +;; STRING content_type ;; Added 2011/2/9 (defconst secrets-interface-item-type-generic "org.freedesktop.Secret.Generic" "The default item type we are using.") +(defconst secrets-struct-secret-content-type + (when (string-equal + (dbus-introspect-get-signature + :session secrets-service secrets-path secrets-interface-service + "GetSecrets" "out") + "a{o(oayays)}") + '("text/plain")) + "The content_type of a secret struct. +It must be wrapped as list, because we add it via `append'. This +is an interface introduced in 2011.") + (defconst secrets-interface-session "org.freedesktop.Secret.Session" "A session tracks state between the service and a client application.") @@ -616,16 +628,21 @@ The object path of the created item is returned." ;; Properties. (append `(:array - (:dict-entry "Label" (:variant ,item)) - (:dict-entry - "Type" (:variant ,secrets-interface-item-type-generic))) + (:dict-entry ,(concat secrets-interface-item ".Label") + (:variant ,item)) + (:dict-entry ,(concat secrets-interface-item ".Type") + (:variant ,secrets-interface-item-type-generic))) (when props - `((:dict-entry - "Attributes" (:variant ,(append '(:array) props)))))) + `((:dict-entry ,(concat secrets-interface-item ".Attributes") + (:variant ,(append '(:array) props)))))) ;; Secret. - `(:struct :object-path ,secrets-session-path - (:array :signature "y") ;; no parameters. - ,(dbus-string-to-byte-array password)) + (append + `(:struct :object-path ,secrets-session-path + (:array :signature "y") ;; No parameters. + ,(dbus-string-to-byte-array password)) + ;; We add the content_type. In backward compatibility + ;; mode, nil is appended, which means nothing. + secrets-struct-secret-content-type) ;; Do not replace. Replace does not seem to work. nil)) (secrets-prompt (cadr result)) -- 2.39.2