emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] trunk r113067: * net/secrets.el (secrets-struct-secret-con


From: Michael Albinus
Subject: [Emacs-diffs] trunk r113067: * net/secrets.el (secrets-struct-secret-content-type): Replace
Date: Wed, 19 Jun 2013 06:24:18 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 113067
revision-id: address@hidden
parent: address@hidden
committer: Michael Albinus <address@hidden>
branch nick: trunk
timestamp: Wed 2013-06-19 08:24:12 +0200
message:
  * net/secrets.el (secrets-struct-secret-content-type): Replace
  check of introspection data by a test call of "CreateItem".  Some
  servers do not offer introspection.
modified:
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/net/secrets.el            secrets.el-20100313201810-6s62gy70hbdnhfs1-1
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-06-19 04:42:32 +0000
+++ b/lisp/ChangeLog    2013-06-19 06:24:12 +0000
@@ -1,3 +1,9 @@
+2013-06-19  Michael Albinus  <address@hidden>
+
+       * net/secrets.el (secrets-struct-secret-content-type): Replace
+       check of introspection data by a test call of "CreateItem".  Some
+       servers do not offer introspection.
+
 2013-06-19  Stefan Monnier  <address@hidden>
 
        * electric.el (electric-pair-mode): Improve interaction with

=== modified file 'lisp/net/secrets.el'
--- a/lisp/net/secrets.el       2013-06-13 10:12:34 +0000
+++ b/lisp/net/secrets.el       2013-06-19 06:24:12 +0000
@@ -310,13 +310,42 @@
 (defconst secrets-interface-item-type-generic "org.freedesktop.Secret.Generic"
   "The default item type we are using.")
 
+;; We cannot use introspection, because some servers, like
+;; mate-keyring-daemon, don't provide relevant data.  Once the dust
+;; has settled, we shall assume the new interface, and get rid of the test.
 (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"))
+  (ignore-errors
+    (let ((content-type "text/plain")
+         (path (cadr
+                (dbus-call-method
+                 :session secrets-service secrets-path
+                 secrets-interface-service
+                 "OpenSession" "plain" '(:variant ""))))
+         result)
+      ;; Create a dummy item.
+      (setq result
+           (dbus-call-method
+            :session secrets-service secrets-session-collection-path
+            secrets-interface-collection "CreateItem"
+            ;; Properties.
+            `(:array
+              (:dict-entry ,(concat secrets-interface-item ".Label")
+                           (:variant "dummy"))
+              (:dict-entry ,(concat secrets-interface-item ".Type")
+                           (:variant ,secrets-interface-item-type-generic)))
+            ;; Secret.
+            `(:struct :object-path ,path
+                      (:array :signature "y")
+                      ,(dbus-string-to-byte-array " ")
+                      :string ,content-type)
+            ;; Don't replace.
+            nil))
+      ;; Remove it.
+      (dbus-call-method
+       :session secrets-service (car result)
+       secrets-interface-item "Delete")
+      ;; Result.
+      `(,content-type)))
   "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.")


reply via email to

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