summaryrefslogtreecommitdiff
path: root/lisp/=netunam.el
diff options
context:
space:
mode:
authorJim Blandy <jimb@redhat.com>1989-10-31 15:59:53 +0000
committerJim Blandy <jimb@redhat.com>1989-10-31 15:59:53 +0000
commitac1c6ea2915c86f32904c13ad6be2db16487003e (patch)
tree2af4fca28f1fddcdcb00479261b7e83bca6a47e8 /lisp/=netunam.el
parent5211c0c990394c4476accaf0f2597d5d7963e7c8 (diff)
downloademacs-ac1c6ea2915c86f32904c13ad6be2db16487003e.tar.gz
Initial revision
Diffstat (limited to 'lisp/=netunam.el')
-rw-r--r--lisp/=netunam.el152
1 files changed, 152 insertions, 0 deletions
diff --git a/lisp/=netunam.el b/lisp/=netunam.el
new file mode 100644
index 00000000000..44d828729ef
--- /dev/null
+++ b/lisp/=netunam.el
@@ -0,0 +1,152 @@
+;; HP-UX RFA Commands
+;; Copyright (C) 1988 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 1, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+;;; Author: cph@zurich.ai.mit.edu
+
+;;; $Header: netunam.el,v 1.3 88/12/21 16:32:23 GMT cph Exp $
+
+(defconst rfa-node-directory "/net/"
+ "Directory in which RFA network special files are stored.
+By HP convention, this is \"/net/\".")
+
+(defvar rfa-default-node nil
+ "If not nil, this is the name of the default RFA network special file.")
+
+(defvar rfa-password-memoize-p t
+ "If non-nil, remember login user's passwords after they have been entered.")
+
+(defvar rfa-password-alist '()
+ "An association from node-name strings to password strings.
+Used if `rfa-password-memoize-p' is non-nil.")
+
+(defvar rfa-password-per-node-p t
+ "If nil, login user uses same password on all machines.
+Has no effect if `rfa-password-memoize-p' is nil.")
+
+(defun rfa-set-password (password &optional node user)
+ "Add PASSWORD to the RFA password database.
+Optional second arg NODE is a string specifying a particular nodename;
+ if supplied and not nil, PASSWORD applies to only that node.
+Optional third arg USER is a string specifying the (remote) user whose
+ password this is; if not supplied this defaults to (user-login-name)."
+ (if (not user) (setq user (user-login-name)))
+ (let ((node-entry (assoc node rfa-password-alist)))
+ (if node-entry
+ (let ((user-entry (assoc user (cdr node-entry))))
+ (if user-entry
+ (rplacd user-entry password)
+ (rplacd node-entry
+ (nconc (cdr node-entry)
+ (list (cons user password))))))
+ (setq rfa-password-alist
+ (nconc rfa-password-alist
+ (list (list node (cons user password))))))))
+
+(defun rfa-open (node &optional user password)
+ "Open a network connection to a server using remote file access.
+First argument NODE is the network node for the remote machine.
+Second optional argument USER is the user name to use on that machine.
+ If called interactively, the user name is prompted for.
+Third optional argument PASSWORD is the password string for that user.
+ If not given, this is filled in from the value of
+`rfa-password-alist', or prompted for. A prefix argument of - will
+cause the password to be prompted for even if previously memoized."
+ (interactive
+ (list (read-file-name "rfa-open: " rfa-node-directory rfa-default-node t)
+ (read-string "user-name: " (user-login-name))))
+ (let ((node
+ (and (or rfa-password-per-node-p
+ (not (equal user (user-login-name))))
+ node)))
+ (if (not password)
+ (setq password
+ (let ((password
+ (cdr (assoc user (cdr (assoc node rfa-password-alist))))))
+ (or (and (not current-prefix-arg) password)
+ (rfa-password-read
+ (format "password for user %s%s: "
+ user
+ (if node (format " on node \"%s\"" node) ""))
+ password))))))
+ (let ((result
+ (sysnetunam (expand-file-name node rfa-node-directory)
+ (concat user ":" password))))
+ (if (interactive-p)
+ (if result
+ (message "Opened network connection to %s as %s" node user)
+ (error "Unable to open network connection")))
+ (if (and rfa-password-memoize-p result)
+ (rfa-set-password password node user))
+ result))
+
+(defun rfa-close (node)
+ "Close a network connection to a server using remote file access.
+NODE is the network node for the remote machine."
+ (interactive
+ (list (read-file-name "rfa-close: " rfa-node-directory rfa-default-node t)))
+ (let ((result (sysnetunam (expand-file-name node rfa-node-directory) "")))
+ (cond ((not (interactive-p)) result)
+ ((not result) (error "Unable to close network connection"))
+ (t (message "Closed network connection to %s" node)))))
+
+(defun rfa-password-read (prompt default)
+ (let ((rfa-password-accumulator (or default "")))
+ (read-from-minibuffer prompt
+ (and default
+ (let ((copy (concat default))
+ (index 0)
+ (length (length default)))
+ (while (< index length)
+ (aset copy index ?.)
+ (setq index (1+ index)))
+ copy))
+ rfa-password-map)
+ rfa-password-accumulator))
+
+(defvar rfa-password-map nil)
+(if (not rfa-password-map)
+ (let ((char ? ))
+ (setq rfa-password-map (make-keymap))
+ (while (< char 127)
+ (define-key rfa-password-map (char-to-string char)
+ 'rfa-password-self-insert)
+ (setq char (1+ char)))
+ (define-key rfa-password-map "\C-g"
+ 'abort-recursive-edit)
+ (define-key rfa-password-map "\177"
+ 'rfa-password-rubout)
+ (define-key rfa-password-map "\n"
+ 'exit-minibuffer)
+ (define-key rfa-password-map "\r"
+ 'exit-minibuffer)))
+
+(defvar rfa-password-accumulator nil)
+
+(defun rfa-password-self-insert ()
+ (interactive)
+ (setq rfa-password-accumulator
+ (concat rfa-password-accumulator
+ (char-to-string last-command-char)))
+ (insert ?.))
+
+(defun rfa-password-rubout ()
+ (interactive)
+ (delete-char -1)
+ (setq rfa-password-accumulator
+ (substring rfa-password-accumulator 0 -1)))