]> code.delx.au - gnu-emacs/blobdiff - lisp/net/tramp-gw.el
Update copyright year to 2015
[gnu-emacs] / lisp / net / tramp-gw.el
index 70b70004de96e15e59ba46f4f198258da54ae336..16eff8ca9e00574a2f4ad964a7aee4135f85c4d5 100644 (file)
@@ -1,6 +1,6 @@
 ;;; tramp-gw.el --- Tramp utility functions for HTTP tunnels and SOCKS gateways
 
-;; Copyright (C) 2007-2011 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
 
 (require 'tramp)
 
-;; Pacify byte-compiler
+;; Pacify byte-compiler.
 (eval-when-compile
   (require 'cl)
   (require 'custom))
-
-;; Avoid byte-compiler warnings if the byte-compiler supports this.
-;; Currently, XEmacs supports this.
-(eval-when-compile
-  (when (featurep 'xemacs)
-      (byte-compiler-options (warnings (- unused-vars)))))
+(defvar socks-noproxy)
 
 ;; We don't add the following methods to `tramp-methods', in order to
 ;; exclude them from file name completion.
 ;; Define HTTP tunnel method ...
 ;;;###tramp-autoload
 (defconst tramp-gw-tunnel-method "tunnel"
-  "*Method to connect HTTP gateways.")
+  "Method to connect HTTP gateways.")
 
 ;; ... and port.
 (defconst tramp-gw-default-tunnel-port 8080
-  "*Default port for HTTP gateways.")
+  "Default port for HTTP gateways.")
 
 ;; Define SOCKS method ...
 ;;;###tramp-autoload
 (defconst tramp-gw-socks-method "socks"
-  "*Method to connect SOCKS servers.")
+  "Method to connect SOCKS servers.")
 
 ;; ... and port.
 (defconst tramp-gw-default-socks-port 1080
-  "*Default port for SOCKS servers.")
+  "Default port for SOCKS servers.")
 
 ;; Autoload the socks library.  It is used only when we access a SOCKS server.
 (autoload 'socks-open-network-stream "socks")
 (defvar tramp-gw-aux-proc nil
   "Process listening on local port, as mediation between SSH and the gateway.")
 
-(defun tramp-gw-gw-proc-sentinel (proc event)
+(defun tramp-gw-gw-proc-sentinel (proc _event)
   "Delete auxiliary process when we are deleted."
   (unless (memq (process-status proc) '(run open))
     (tramp-message
      tramp-gw-vector 4 "Deleting auxiliary process `%s'" tramp-gw-gw-proc)
-    (let* (tramp-verbose
+    (let* ((tramp-verbose 0)
           (p (tramp-get-connection-property proc "process" nil)))
       (when (processp p) (delete-process p)))))
 
-(defun tramp-gw-aux-proc-sentinel (proc event)
+(defun tramp-gw-aux-proc-sentinel (proc _event)
   "Activate the different filters for involved gateway and auxiliary processes."
   (when (memq (process-status proc) '(run open))
     ;; A new process has been spawned from `tramp-gw-aux-proc'.
     (tramp-compat-set-process-query-on-exit-flag proc nil)
     ;; We don't want debug messages, because the corresponding debug
     ;; buffer might be undecided.
-    (let (tramp-verbose)
+    (let ((tramp-verbose 0))
       (tramp-set-connection-property tramp-gw-gw-proc "process" proc)
       (tramp-set-connection-property proc "process" tramp-gw-gw-proc))
     ;; Set the process-filter functions for both processes.
          (tramp-gw-process-filter tramp-gw-gw-proc s))))))
 
 (defun tramp-gw-process-filter (proc string)
-  (let (tramp-verbose)
+  (let ((tramp-verbose 0))
     (process-send-string
      (tramp-get-connection-property proc "process" nil) string)))
 
@@ -154,7 +149,7 @@ instead of the host name declared in TARGET-VEC."
               (memq (process-status tramp-gw-aux-proc) '(listen)))
     (let ((aux-vec
           (vector "aux" (tramp-file-name-user gw-vec)
-                  (tramp-file-name-host gw-vec) nil)))
+                  (tramp-file-name-host gw-vec) nil nil)))
       (setq tramp-gw-aux-proc
            (make-network-process
             :name (tramp-buffer-name aux-vec) :buffer nil :host 'local
@@ -178,7 +173,7 @@ instead of the host name declared in TARGET-VEC."
           (tramp-file-name-host gw-vec)))
         ;; Declare the SOCKS server to be used.
         (socks-server
-         (list "Tramp tempory socks server list"
+         (list "Tramp temporary socks server list"
                ;; Host name.
                (tramp-file-name-real-host gw-vec)
                ;; Port number.
@@ -200,11 +195,12 @@ instead of the host name declared in TARGET-VEC."
     (setq tramp-gw-gw-proc
          (funcall
           socks-function
-          (tramp-get-connection-name gw-vec)
-          (tramp-get-connection-buffer gw-vec)
+          (let ((tramp-verbose 0)) (tramp-get-connection-name gw-vec))
+          (let ((tramp-verbose 0)) (tramp-get-connection-buffer gw-vec))
           (tramp-file-name-real-host target-vec)
           (tramp-file-name-port target-vec)))
     (set-process-sentinel tramp-gw-gw-proc 'tramp-gw-gw-proc-sentinel)
+    (set-process-coding-system tramp-gw-gw-proc 'binary 'binary)
     (tramp-compat-set-process-query-on-exit-flag tramp-gw-gw-proc nil)
     (tramp-message
      vec 4 "Opened %s process `%s'"
@@ -243,14 +239,14 @@ authentication is requested from proxy server, provide it."
        tramp-gw-vector 6 "\n%s"
        (format
        "%s%s\r\n" command
-       (replace-regexp-in-string ;; no password in trace!
+       (tramp-compat-replace-regexp-in-string ;; no password in trace!
         "Basic [^\r\n]+" "Basic xxxxx" authentication t)))
       (with-current-buffer buffer
        ;; Trap errors to be traced in the right trace buffer.  Often,
        ;; proxies have a timeout of 60".  We wait 65" in order to
        ;; receive an answer this case.
        (ignore-errors
-         (let (tramp-verbose)
+         (let ((tramp-verbose 0))
            (tramp-wait-for-regexp proc 65 "\r?\n\r?\n")))
        ;; Check return code.
        (goto-char (point-min))
@@ -265,6 +261,10 @@ authentication is requested from proxy server, provide it."
          (200 (setq found t))
          ;; We need basic authentication.
          (401 (setq authentication (tramp-gw-basic-authentication nil first)))
+         ;; Access forbidden.
+         (403 (tramp-error-with-buffer
+               (current-buffer) tramp-gw-vector 'file-error
+               "Connection to %s:%d forbidden." host service))
          ;; Target host not found.
          (404 (tramp-error-with-buffer
                (current-buffer) tramp-gw-vector 'file-error