emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] nsm 02/02: Display the certificate more pretty


From: Lars Ingebrigtsen
Subject: [Emacs-diffs] nsm 02/02: Display the certificate more pretty
Date: Tue, 18 Nov 2014 16:22:45 +0000

branch: nsm
commit f924c7deeb96d2caf0d0e4fabc6008204984feeb
Author: Lars Magne Ingebrigtsen <address@hidden>
Date:   Tue Nov 18 17:22:34 2014 +0100

    Display the certificate more pretty
---
 lisp/net/nsm.el |   77 ++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 56 insertions(+), 21 deletions(-)

diff --git a/lisp/net/nsm.el b/lisp/net/nsm.el
index 76354b8..9e8684d 100644
--- a/lisp/net/nsm.el
+++ b/lisp/net/nsm.el
@@ -179,24 +179,31 @@ unencrypted."
       t)))
 
 (defun nsm-query-user (message args cert)
-  (let ((responses '((?n . no)
-                    (?s . session)
-                    (?a . always)))
-       (prefix "")
-       response)
-    (while (not response)
-      (setq response
-           (cdr
-            (assq (downcase
-                   (read-char (concat prefix
-                                      cert "\n"
-                                      (apply 'format message args)
-                                      "\n\nContinue connecting? (No, Session 
only, Always)")))
-                  responses)))
-      (unless response
-       (ding)
-       (setq prefix "Invalid choice.\n\n")))
-    response))
+  (let ((buffer (get-buffer-create "*Network Security Manager*")))
+    (with-help-window buffer
+      (with-current-buffer buffer
+       (erase-buffer)
+       (when (> (length cert) 0)
+         (insert cert "\n"))
+       (insert (apply 'format message args))))
+    (let ((responses '((?n . no)
+                      (?s . session)
+                      (?a . always)))
+         (prefix "")
+         response)
+      (while (not response)
+       (setq response
+             (cdr
+              (assq (downcase
+                     (read-char
+                      (concat prefix
+                              "Continue connecting? (No, Session only, 
Always)")))
+                    responses)))
+       (unless response
+         (ding)
+         (setq prefix "Invalid choice.  ")))
+      (kill-buffer buffer)
+      response)))
 
 (defun nsm-save-host (id status what permanency)
   (let ((saved
@@ -279,9 +286,10 @@ unencrypted."
 (defun nsm-format-certificate (status)
   (let ((cert (plist-get status :certificate)))
     (when cert
-      (format "Issuer: %s\nHost informasjon: %s\nPublic key: %s, signature: 
%s, security level: %s\nValid from: %s, valid to: %s\n"
-             (plist-get cert :issuer)
-             (plist-get cert :subject)
+      (format "Certificate issued by %s\nIssued to %s\nCertificate host name: 
%s\nPublic key: %s, signature: %s, security level: %s\nValid from: %s, valid 
to: %s\n"
+             (nsm-certificate-part (plist-get cert :issuer) "CN")
+             (nsm-certificate-part (plist-get cert :subject) "O")
+             (nsm-certificate-part (plist-get cert :subject) "CN")
              (plist-get cert :public-key-algorithm)
              (plist-get cert :signature-algorithm)
              (propertize (plist-get cert :certificate-security-level)
@@ -289,6 +297,33 @@ unencrypted."
              (plist-get cert :valid-from)
              (plist-get cert :valid-to)))))
 
+(defun nsm-certificate-part (string part)
+  (cadr (assoc part (nsm-parse-subject string))))
+
+(defun nsm-parse-subject (string)
+  (with-temp-buffer
+    (insert string)
+    (goto-char (point-min))
+    (let ((start (point))
+         (result nil))
+      (while (not (eobp))
+       (push (replace-regexp-in-string
+              "[\\]\\(.\\)" "\\1"
+              (buffer-substring start
+                                (if (re-search-forward "[^\\]," nil 'move)
+                                    (1- (point))
+                                  (point))))
+             result)
+       (setq start (point)))
+      (mapcar
+       (lambda (elem)
+        (let ((pos (cl-position ?= elem)))
+          (if pos
+              (list (substring elem 0 pos)
+                    (substring elem (1+ pos)))
+            elem)))
+       (nreverse result)))))
+
 (provide 'nsm)
 
 ;;; nsm.el ends here



reply via email to

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