summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIku Iwasa <iku.iwasa@gmail.com>2019-04-07 17:59:59 +0900
committerDamien Cassou <damien@cassou.me>2019-06-24 09:15:40 +0200
commit2a0a05789d4734e4b3d18941346ecda9834e7cc9 (patch)
treee229d71f1d3f97f601a94c1ede4e631435221243
parenta63cbb56dfc6074189407e9e182e807ce058e618 (diff)
downloademacs-2a0a05789d4734e4b3d18941346ecda9834e7cc9.tar.gz
Add auth-source-pass-port-separator option
* lisp/auth-source-pass.el (auth-source-pass-port-separator): New option to specify separator between host and port, default to colon (":"). (auth-source-pass--find-match-unambiguous): Adapt to make use of the new variable. * test/lisp/auth-source-pass-tests.el: Add corresponding tests.
-rw-r--r--lisp/auth-source-pass.el17
-rw-r--r--test/lisp/auth-source-pass-tests.el11
2 files changed, 25 insertions, 3 deletions
diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el
index 1fda6982328..626dbf842c1 100644
--- a/lisp/auth-source-pass.el
+++ b/lisp/auth-source-pass.el
@@ -49,6 +49,11 @@
:type 'directory
:version "27.1")
+(defcustom auth-source-pass-port-separator ":"
+ "Separator string between host and port in entry filename."
+ :type 'string
+ :version "27.1")
+
(cl-defun auth-source-pass-search (&rest spec
&key backend type host user port
&allow-other-keys)
@@ -254,9 +259,15 @@ return nil.
HOSTNAME should not contain any username or port number."
(or
- (and user port (auth-source-pass--find-one-by-entry-name (format "%s@%s:%s" user hostname port) user))
- (and user (auth-source-pass--find-one-by-entry-name (format "%s@%s" user hostname) user))
- (and port (auth-source-pass--find-one-by-entry-name (format "%s:%s" hostname port) nil))
+ (and user port (auth-source-pass--find-one-by-entry-name
+ (format "%s@%s%s%s" user hostname auth-source-pass-port-separator port)
+ user))
+ (and user (auth-source-pass--find-one-by-entry-name
+ (format "%s@%s" user hostname)
+ user))
+ (and port (auth-source-pass--find-one-by-entry-name
+ (format "%s%s%s" hostname auth-source-pass-port-separator port)
+ nil))
(auth-source-pass--find-one-by-entry-name hostname user)
;; if that didn't work, remove subdomain: foo.bar.com -> bar.com
(let ((components (split-string hostname "\\.")))
diff --git a/test/lisp/auth-source-pass-tests.el b/test/lisp/auth-source-pass-tests.el
index ab9ef92c144..ae7a696bc66 100644
--- a/test/lisp/auth-source-pass-tests.el
+++ b/test/lisp/auth-source-pass-tests.el
@@ -186,6 +186,17 @@ This function is intended to be set to `auth-source-debug`."
(should (equal (auth-source-pass--find-match "host.com:8888" "someuser" nil)
"host.com"))))
+(ert-deftest auth-source-pass-find-host-with-port ()
+ (auth-source-pass--with-store '(("host.com:443"))
+ (should (equal (auth-source-pass--find-match "host.com" "someuser" "443")
+ "host.com:443"))))
+
+(ert-deftest auth-source-pass-find-host-with-custom-port-separator ()
+ (let ((auth-source-pass-port-separator "#"))
+ (auth-source-pass--with-store '(("host.com#443"))
+ (should (equal (auth-source-pass--find-match "host.com" "someuser" "443")
+ "host.com#443")))))
+
(defmacro auth-source-pass--with-store-find-foo (store &rest body)
"Use STORE while executing BODY. \"foo\" is the matched entry."
(declare (indent 1))