Subject: bug#18199: 24.4.50; tramp uses wrong arguments to nc

From: Michael Albinus <[email-masked]>
Date: Wed, 06 Aug 2014 09:43:46 +0200

Jason Rumney <[email-masked]> writes:

Hi Jason,

> When connecting to a Busybox/Linux based router with tramp's new nc method,
> the file transfer fails.  Below is the relevant debug log:
>
> ---------------------------------------------------------------------
> ///3359aa65e9a4645eb0b84d831a25d5c2#$
> 23:26:29.200991 tramp-send-command (6) # nc -l -p 51257 </etc/TZ &
> 23:26:29.250828 tramp-wait-for-regexp (6) # 
>
> ///3359aa65e9a4645eb0b84d831a25d5c2#$
> 23:26:29.251550 tramp-send-command (6) # netstat -l | grep -q :51257
> 23:26:29.308484 tramp-wait-for-regexp (6) # 
> BusyBox v1.6.1 (2011-05-25 14:47:48 CST) multi-call binary
>
> Usage: 
> nc [IPADDR PORTNUM]
>
> Open a pipe to IP:port

[...]

> The actual command required is
>
>    nc -l 51257 </etc/TZ &

Well, as you might guess I have tested this with my own equipment. My
silly router runs a more recent version of busybox, which requires the
"-p" prefix for nc's port specification:

--8<---------------cut here---------------start------------->8---
# nc -l 51257
nc: bad address '51257'
# nc -h
nc: invalid option -- h
BusyBox v1.19.3 (2012-08-08 12:53:46 CEST) multi-call binary.

Usage: nc [-iN] [-wN] [-l] [-p PORT] [-f FILE|IPADDR PORT] [-e PROG]

Open a pipe to IP:PORT or FILE

        -e PROG Run PROG after connect
        -l      Listen mode, for inbound connects
                (use -l twice with -e for persistent server)
        -p PORT Local port
        -w SEC  Timeout for connect
        -i SEC  Delay interval for lines sent
        -f FILE Use file (ala /dev/ttyS0) instead of network
--8<---------------cut here---------------end--------------->8---

I don't see how to unify both syntax variants. Therfore, I will add a
check for nc prior the first call, in order to determine what to
use. Alternatively, it could be made configurable; haven't decided yet.

This might take some days. For further testing (which would much be
appreciated!), you could use the following patch:

--8<---------------cut here---------------start------------->8---
*** /home/albinus/src/emacs/lisp/net/tramp-sh.el.~117648~	2014-08-06 09:23:05.687261671 +0200
--- /home/albinus/src/emacs/lisp/net/tramp-sh.el	2014-08-06 09:22:01.750100553 +0200
***************
*** 218,225 ****
      ;; We use "-v" for better error tracking.
      (tramp-copy-args            (("-w" "1") ("-v") ("%h") ("%r")))
      (tramp-remote-copy-program  "nc")
!     ;; We use "-p" as required for busyboxes.
!     (tramp-remote-copy-args     (("-l") ("-p" "%r")))
      (tramp-default-port         23)))
  ;;;###tramp-autoload
  (add-to-list 'tramp-methods
--- 218,224 ----
      ;; We use "-v" for better error tracking.
      (tramp-copy-args            (("-w" "1") ("-v") ("%h") ("%r")))
      (tramp-remote-copy-program  "nc")
!     (tramp-remote-copy-args     (("-l") ("%r")))
      (tramp-default-port         23)))
  ;;;###tramp-autoload
  (add-to-list 'tramp-methods
--8<---------------cut here---------------end--------------->8---

Best regards, Michael.