scp of sysfs file repeats data
Craig McQueen
craig.mcqueen at innerrange.com
Wed Jun 24 07:49:54 AWST 2015
> From: Peter Korsgaard [mailto:jacmet at gmail.com] On Behalf Of Peter
>
> >>>>> "Peter" == Peter Korsgaard <peter at korsgaard.com> writes:
>
> >>>>> "Matt" == Matt Johnston <matt at ucc.asn.au> writes:
> >> I see what you mean. I'll update scp to OpenSSH's latest - >> there are a
> few changes to be merged.
>
> > FYI, openssh scp has a similar problem here:
>
> > open("vendor", O_RDONLY|O_NONBLOCK) = 3
> > fstat(3, {st_mode=S_IFREG|0444, st_size=4096, ...}) = 0
> > fcntl(3, F_GETFL) = 0x8800 (flags
> O_RDONLY|O_NONBLOCK|O_LARGEFILE)
> > fcntl(3, F_SETFL, O_RDONLY|O_LARGEFILE) = 0
> > write(6, "C0444 4096 vendor\n", 18) = 18
> > read(3, "0x8086\n", 4096) = 7
> > read(3, "", 4089) = 0
> > write(6,
> "0x8086\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) =
> 4096
>
> > This is with openssh 6.7p1-6.
>
> But thinking further about it, I guess that's just an artifact of the protocol and
> there isn't any way around it.
I guess the question is, should the copied file's size be that reported in the directory listing, or what is actually successfully read from the file?
If I use 'cp' to copy a sysfs file, then the copy contains the bytes actually read. E.g.:
# ls -al /sys/class/net/eth0/address
-r--r--r-- 1 root root 4096 Jun 23 23:43 /sys/class/net/eth0/address
# cp /sys/class/net/eth0/address .
# ls -al
drwxr-xr-x 1 root root 4096 Jun 23 23:43 .
drwxr-xr-x 1 root root 4096 Jun 23 06:51 ..
-r--r--r-- 1 root root 18 Jun 23 23:43 address
So with 'cp' I get a file length of 18 (the bytes successfully read), not 4096.
As a user, I expect 'scp' to do the same thing. Does the protocol make that difficult somehow?
--
Craig McQueen
More information about the Dropbear
mailing list