Commit 1e2eefdd authored by Glenn Morris's avatar Glenn Morris
Browse files

(top-level): Move provide statement to end.

(pcmpl-unix-group-file, pcmpl-unix-passwd-file): Remove leading
`*' from doc-string.  Allow to be nil.
(pcmpl-ssh-known-hosts-file): Convert comment into expanded doc-string.
Allow to be nil.  Add :version.
(pcmpl-ssh-hosts): Move definition before use.  Handle lines
without hostnames, and multiple hostnames per line.
parent 9c519cf2
2008-02-08 Glenn Morris <rgm@gnu.org>
* pcmpl-unix.el (top-level): Move provide statement to end.
(pcmpl-unix-group-file, pcmpl-unix-passwd-file): Remove leading
`*' from doc-string. Allow to be nil.
(pcmpl-ssh-known-hosts-file): Convert comment into expanded doc-string.
Allow to be nil. Add :version.
(pcmpl-ssh-hosts): Move definition before use. Handle lines
without hostnames, and multiple hostnames per line.
2008-02-08 Phil Hagelberg <phil@evri.com>
* pcmpl-unix.el (pcmpl-ssh-known-hosts-file): New defcustom.
(pcomplete/ssh, pcomplete/scp, pcmpl-ssh-hosts): New functions.
2008-02-07 Timo Savola <timo.savola@iki.fi> 2008-02-07 Timo Savola <timo.savola@iki.fi>
   
* startup.el (command-line-x-option-alist): Add --parent-id. * startup.el (command-line-x-option-alist): Add --parent-id.
......
...@@ -24,26 +24,29 @@ ...@@ -24,26 +24,29 @@
;;; Code: ;;; Code:
(provide 'pcmpl-unix)
(require 'pcomplete) (require 'pcomplete)
;; User Variables: ;; User Variables:
(defcustom pcmpl-unix-group-file "/etc/group" (defcustom pcmpl-unix-group-file "/etc/group"
"*If non-nil, a string naming the group file on your system." "If non-nil, a string naming the group file on your system."
:type 'file :type '(choice file (const nil))
:group 'pcmpl-unix) :group 'pcmpl-unix)
(defcustom pcmpl-unix-passwd-file "/etc/passwd" (defcustom pcmpl-unix-passwd-file "/etc/passwd"
"*If non-nil, a string naming the passwd file on your system." "If non-nil, a string naming the passwd file on your system."
:type 'file :type '(choice file (const nil))
:group 'pcmpl-unix) :group 'pcmpl-unix)
(defcustom pcmpl-ssh-known-hosts-file "~/.ssh/known_hosts" (defcustom pcmpl-ssh-known-hosts-file "~/.ssh/known_hosts"
"The location of the user's SSH `known_hosts' file." "If non-nil, a string naming your SSH \"known_hosts\" file.
:type 'file This allows completion of SSH host names. Note that newer
:group 'pcmpl-unix) versions of ssh hash the hosts by default to prevent
Island-hopping SSH attacks. This can be disabled, at some risk,
with the SSH option \"HashKnownHosts no\"."
:type '(choice file (const nil))
:group 'pcmpl-unix
:version "23.1")
;; Functions: ;; Functions:
...@@ -128,21 +131,24 @@ ...@@ -128,21 +131,24 @@
(pcomplete-here* (pcmpl-unix-group-names))) (pcomplete-here* (pcmpl-unix-group-names)))
(while (pcomplete-here (pcomplete-entries)))) (while (pcomplete-here (pcomplete-entries))))
;; ssh support by Phil Hagelberg. ;; ssh support by Phil Hagelberg.
;; http://www.emacswiki.org/cgi-bin/wiki/pcmpl-ssh.el ;; http://www.emacswiki.org/cgi-bin/wiki/pcmpl-ssh.el
;; This will allow eshell to autocomplete SSH hosts from the list of (defun pcmpl-ssh-hosts ()
;; known hosts in your ~/.ssh/known_hosts file. Note that newer "Return a list of hosts found in `pcmpl-ssh-known-hosts-file'."
;; versions of ssh hash the hosts by default to prevent Island-hopping (when (and pcmpl-ssh-known-hosts-file
;; SSH attacks. (https://itso.iu.edu/Hashing_the_OpenSSH_known__hosts_File) (file-readable-p pcmpl-ssh-known-hosts-file))
;; You can disable this by putting the following line in your ~/.ssh/config (with-temp-buffer
;; file following the "Host *" directive: (insert-file-contents-literally pcmpl-ssh-known-hosts-file)
(let (ssh-hosts-list)
;; HashKnownHosts no (while (re-search-forward "^ *\\([-.[:alnum:]]+\\)[, ]" nil t)
(add-to-list 'ssh-hosts-list (match-string 1))
;; Note that this will make you vulnerable to the Island-hopping (while (and (looking-back ",")
;; attack described in the link above if you allow key-based (re-search-forward "\\([-.[:alnum:]]+\\)[, ]"
;; passwordless logins and your account is compromised. (line-end-position) t))
(add-to-list 'ssh-hosts-list (match-string 1))))
ssh-hosts-list))))
;;;###autoload ;;;###autoload
(defun pcomplete/ssh () (defun pcomplete/ssh ()
...@@ -153,24 +159,14 @@ ...@@ -153,24 +159,14 @@
;;;###autoload ;;;###autoload
(defun pcomplete/scp () (defun pcomplete/scp ()
"Completion rules for the `scp' command. "Completion rules for the `scp' command.
Includes files as well as host names followed by a colon." Includes files as well as host names followed by a colon."
(pcomplete-opt "1246BCpqrvcFiloPS") (pcomplete-opt "1246BCpqrvcFiloPS")
(while t (pcomplete-here (append (pcomplete-all-entries) (while t (pcomplete-here (append (pcomplete-all-entries)
(mapcar (lambda (host) (concat host ":")) (pcmpl-ssh-hosts)))))) (mapcar (lambda (host)
(concat host ":"))
(pcmpl-ssh-hosts))))))
(defun pcmpl-ssh-hosts () (provide 'pcmpl-unix)
"Returns a list of hosts found in the users `known_hosts' file."
(if (file-readable-p pcmpl-ssh-known-hosts-file) ;; arch-tag: 3f9eb5af-7e0e-449d-b586-381cbbf8fc5c
(with-temp-buffer
(insert-file-contents-literally pcmpl-ssh-known-hosts-file)
(let ((ssh-hosts-list) '())
(while (not (eobp))
(let ((hostname (buffer-substring (point) (- (search-forward-regexp "[, ]") 1))))
(unless (string-match "^|" hostname)
(add-to-list 'ssh-hosts-list hostname)))
(forward-line))
ssh-hosts-list))))
;;; arch-tag: 3f9eb5af-7e0e-449d-b586-381cbbf8fc5c
;;; pcmpl-unix.el ends here ;;; pcmpl-unix.el ends here
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment