Bug 1019923

Summary: Using rsync with rsh="ssh -tt" fails with code 12
Product: Red Hat Enterprise Linux 6 Reporter: John Trowbridge <jtrowbri>
Component: rsyncAssignee: Pavel Šimerda (pavlix) <psimerda>
Status: CLOSED NOTABUG QA Contact: BaseOS QE Security Team <qe-baseos-security>
Severity: medium Docs Contact:
Priority: medium    
Version: 6.4CC: jtrowbri
Target Milestone: rcFlags: jtrowbri: needinfo-
jtrowbri: needinfo-
Target Release: ---   
Hardware: All   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2014-03-10 15:31:29 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description John Trowbridge 2013-10-16 15:54:05 UTC
Description of problem:
When using ssh -tt as the remote shell for rsync, the transfer fails with error:
rsync error: error in rsync protocol data stream (code 12) at io.c(1134) [sender=3.0.6]

Version-Release number of selected component (if applicable):
rsync 

How reproducible:
Easily reproducible.

Steps to Reproduce:
1. echo test >> test
2. rsync --rsh="ssh -tt" test root@rhel:/root/test

Actual results:
    tcgetattr: Invalid argument
    unexpected tag 87 [sender]
    rsync error: error in rsync protocol data stream (code 12) at io.c(1134) [sender=3.0.6]

Also, the file does not transfer.

Expected results:
No error, and the file should transfer.

Additional info:
Same error message as BZ# 959824. Different reproduction steps though.

Comment 1 Pavel Šimerda (pavlix) 2013-10-17 05:35:51 UTC
I don't think tools like rsync are generally ready to transfer data over a pseudo terminal and I wouldn't expect it to work. The transfers rsync is doing are of binary nature and any layer that works with special characters naturally breaks that.

I am curious about the reason for using double '-t' as the meaning of that is to force TTY allocation even when it clearly doesn't make sense (e.g. the local side is a daemon that wants to transfer data, and not a terminal session).

Is there any reason to use '-tt' except to deliberately break any binary protocol over the SSH transport (e.g. for testing purposes)?