[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 97ecff0: Handle auth-source items with special char
From: |
Lars Ingebrigtsen |
Subject: |
[Emacs-diffs] master 97ecff0: Handle auth-source items with special characters on OS X |
Date: |
Sun, 24 Apr 2016 12:43:18 +0000 |
branch: master
commit 97ecff0783128edeb6fe5f6e441993c9bbf2a25a
Author: Jun Hao <address@hidden>
Commit: Lars Magne Ingebrigtsen <address@hidden>
Handle auth-source items with special characters on OS X
* lisp/auth-source.el
(auth-source-macos-keychain-search-items): Handle keychain
output correctly when has special chararcters (bug#22824).
---
lisp/auth-source.el | 35 +++++++++++++++++++++++++++--------
1 file changed, 27 insertions(+), 8 deletions(-)
diff --git a/lisp/auth-source.el b/lisp/auth-source.el
index cfd21a5..d691b54 100644
--- a/lisp/auth-source.el
+++ b/lisp/auth-source.el
@@ -1758,12 +1758,28 @@ entries for git.gnus.org:
items)))
items))
+
+(defun auth-source--decode-octal-string (string)
+ "Convert octal string to utf-8 string. E.g: 'a\134b' to 'a\b'"
+ (let ((list (string-to-list string))
+ (size (length string)))
+ (decode-coding-string
+ (apply #'unibyte-string
+ (loop for i = 0 then (+ i (if (eq (nth i list) ?\\) 4 1))
+ for var = (nth i list)
+ while (< i size)
+ if (eq var ?\\)
+ collect (string-to-number
+ (concat (cl-subseq list (+ i 1) (+ i 4))) 8)
+ else
+ collect var))
+ 'utf-8)))
+
(defun* auth-source-macos-keychain-search-items (coll _type _max
host port
&key label type
user
&allow-other-keys)
-
(let* ((keychain-generic (eq type 'macos-keychain-generic))
(args `(,(if keychain-generic
"find-generic-password"
@@ -1792,29 +1808,32 @@ entries for git.gnus.org:
(goto-char (point-min))
(while (not (eobp))
(cond
- ((looking-at "^password: \"\\(.+\\)\"$")
+ ((looking-at "^password: \\(?:0x[0-9A-F]+\\)? *\"\\(.+\\)\"")
(setq ret (auth-source-macos-keychain-result-append
ret
keychain-generic
"secret"
- (lexical-let ((v (match-string 1)))
+ (lexical-let ((v (auth-source--decode-octal-string
+ (match-string 1))))
(lambda () v)))))
;; TODO: check if this is really the label
;; match 0x00000007 <blob>="AppleID"
- ((looking-at "^[ ]+0x00000007 <blob>=\"\\(.+\\)\"")
+ ((looking-at
+ "^[ ]+0x00000007 <blob>=\\(?:0x[0-9A-F]+\\)? *\"\\(.+\\)\"")
(setq ret (auth-source-macos-keychain-result-append
ret
keychain-generic
"label"
- (match-string 1))))
+ (auth-source--decode-octal-string (match-string 1)))))
;; match "crtr"<uint32>="aapl"
;; match "svce"<blob>="AppleID"
- ((looking-at "^[ ]+\"\\([a-z]+\\)\"[^=]+=\"\\(.+\\)\"")
+ ((looking-at
+ "^[ ]+\"\\([a-z]+\\)\"[^=]+=\\(?:0x[0-9A-F]+\\)? *\"\\(.+\\)\"")
(setq ret (auth-source-macos-keychain-result-append
ret
keychain-generic
- (match-string 1)
- (match-string 2)))))
+ (auth-source--decode-octal-string (match-string 1))
+ (auth-source--decode-octal-string (match-string 2))))))
(forward-line)))
;; return `ret' iff it has the :secret key
(and (plist-get ret :secret) (list ret))))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 97ecff0: Handle auth-source items with special characters on OS X,
Lars Ingebrigtsen <=