diff options
| author | Jim Blandy <jimb@redhat.com> | 1989-10-31 15:59:53 +0000 | 
|---|---|---|
| committer | Jim Blandy <jimb@redhat.com> | 1989-10-31 15:59:53 +0000 | 
| commit | 0d20f9a04efa7cfbe205e4967b6797b89fc64fe7 (patch) | |
| tree | 787af4d2117afe2886996c45c40451f7406fe4fb /lisp/netunam.el | |
| parent | 89758ab855a9a8a64f36d986da39767ebdc9ac76 (diff) | |
| download | emacs-0d20f9a04efa7cfbe205e4967b6797b89fc64fe7.tar.gz | |
Initial revision
Diffstat (limited to 'lisp/netunam.el')
| -rw-r--r-- | lisp/netunam.el | 152 | 
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))) | 
