Function: ange-ftp-normal-login

ange-ftp-normal-login is a byte-compiled function defined in ange-ftp.el.gz.

Signature

(ange-ftp-normal-login HOST USER PASSWORD ACCOUNT PROC)

Documentation

Connect to the FTP-server on HOST as USER using PASSWORD and ACCOUNT.

PROC is the process to the FTP-client. HOST may have an optional suffix of the form #PORT to specify a non-default port.

Source Code

;; Defined in /usr/src/emacs/lisp/net/ange-ftp.el.gz
(defun ange-ftp-normal-login (host user password account proc)
  "Connect to the FTP-server on HOST as USER using PASSWORD and ACCOUNT.
PROC is the process to the FTP-client.  HOST may have an optional
suffix of the form #PORT to specify a non-default port."
  (save-match-data
    (string-match "\\`\\([^#]+\\)\\(#\\([0-9]+\\)\\)?\\'" host)
    (let* ((nshost (ange-ftp-nslookup-host (match-string 1 host)))
	   (port (match-string 3 host))
	   (result (ange-ftp-raw-send-cmd
		    proc
		    (if port
			(format "open %s %s" nshost port)
		      (format "open %s" nshost))
		    (format "Opening FTP connection to %s" host))))
      (or (car result)
	  (ange-ftp-error host user
			  (concat "OPEN request failed: "
				  (cdr result))))
      (if (not (and ange-ftp-raw-login (string< "" account)))
	  (setq result (ange-ftp-raw-send-cmd
			proc
			(if (and (ange-ftp-use-smart-gateway-p host)
				 ange-ftp-gateway-host)
			    (format "user \"%s\"@%s %s %s"
				    user nshost password account)
			  (format "user \"%s\" %s %s" user password account))
			(format "Logging in as user %s@%s" user host)))
	(let ((good ange-ftp-good-msgs)
	      (skip ange-ftp-skip-msgs))
	  (setq ange-ftp-good-msgs (concat ange-ftp-good-msgs
					   "\\|^331 \\|^332 "))
	  (if (string-match (regexp-quote "\\|^331 ") ange-ftp-skip-msgs)
	      (setq ange-ftp-skip-msgs
		    (replace-match "" t t ange-ftp-skip-msgs)))
	  (if (string-match (regexp-quote "\\|^332 ") ange-ftp-skip-msgs)
	      (setq ange-ftp-skip-msgs
		    (replace-match "" t t ange-ftp-skip-msgs)))
	  (setq result (ange-ftp-raw-send-cmd
			proc
			(format "quote \"USER %s\"" user)
			(format "Logging in as user %s@%s" user host)))
	  (and (car result)
	       (setq result (ange-ftp-raw-send-cmd
			     proc
			     (format "quote \"PASS %s\"" password)
			     (format "Logging in as user %s@%s" user host)))
	       (and (car result)
		    (setq result (ange-ftp-raw-send-cmd
				  proc
				  (format "quote \"ACCT %s\"" account)
				  (format "Logging in as user %s@%s" user host)))
		    ))
	  (setq ange-ftp-good-msgs good
		ange-ftp-skip-msgs skip)))
      (or (car result)
	  (progn
	    (ange-ftp-set-passwd host user nil)	;reset password.
	    (ange-ftp-set-account host user nil) ;reset account.
	    (ange-ftp-error host user
			    (concat "USER request failed: "
				    (cdr result))))))))