Hi, I've fixed a couple of bugs in cpio. When you run it as root CPIO is meant to set the uid and guid of files from information in the archive, but it currently doesn't do this because of a couple of bugs:
1) It's looking at the wrong parts of the header 2) The "Am I root?" test is coded as "getpid() == 0" rather than "geteuid() == 0". It's difficult to think of a realistic scenario where the former would be true! There may be people out there who are depending on the old, incorrect, behaviour, so I've also implemented a "--no-preserve-owner" option (as in GNU cpio) to re-enable this behaviour. This is separated out in the second patch, but I think both patches need to be added at the same time. To test it I ran: cd /tmp && rm -rf s d && (mkdir s d && cp -a /dev/tty s && mkdir s/dir && touch s/file && chown test:system s/* && (cd s && ls | cpio -o > .s.cpio) && (cd d && cpio -i < ../s/.s.cpio) && (ls -l s ; ls -l d)) ; rm -rf /tmp/d Before the change I got: total 0 drwxr-xr-x 2 test system 40 1970-01-01 00:21 dir -rw-r--r-- 1 test system 0 1970-01-01 00:21 file crw-rw-rw- 1 test system 5, 0 1970-01-01 00:00 tty total 0 drwxr-xr-x 2 root root 40 1970-01-01 00:21 dir -rw-r--r-- 1 root root 0 1970-01-01 00:21 file crw-r--r-- 1 root root 0, 13 1970-01-01 00:00 tty and afterwards: total 0 drwxr-xr-x 2 test system 40 1970-01-01 00:02 dir -rw-r--r-- 1 test system 0 1970-01-01 00:02 file crw-rw-rw- 1 test system 5, 0 1970-01-01 00:00 tty total 0 drwxr-xr-x 2 test system 40 1970-01-01 00:02 dir -rw-r--r-- 1 test system 0 1970-01-01 00:02 file crw-r--r-- 1 test system 5, 0 1970-01-01 00:00 tty I also checked that --no-preserve-owner works as expected, and that non-root operation doesn't preserve the ownership info. Mike. Mike Moreton Software Project Leader Frontier Silicon Ltd D +44 1223 497780 www.frontier-silicon.com <http://www.frontier-silicon.com/> Ashwell Point, Babraham Road, Sawston, Cambridge, CB22 3LJ, UK Frontier Silicon Ltd is a Toumaz Group company (the Group also includes Sensium Healthcare and Frontier Microsystems), registered in England and Wales - company no. 4213838. Registered address: 137 Euston Road, London, NW1 2AA
0001-Correct-setting-of-guid-and-uid-when-extracting-from.patch
Description: 0001-Correct-setting-of-guid-and-uid-when-extracting-from.patch
0002-CPIO-Add-no-preserve-owner-option.patch
Description: 0002-CPIO-Add-no-preserve-owner-option.patch
_______________________________________________ Toybox mailing list [email protected] http://lists.landley.net/listinfo.cgi/toybox-landley.net
