Note: This is a public test instance of Red Hat Bugzilla. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback at bugzilla.redhat.com.

Bug 145225

Summary: [PATCH] cpio does not pack symlinks properly
Product: [Fedora] Fedora Reporter: Ralf Ertzinger <redhat-bugzilla>
Component: cpioAssignee: Peter Vrabec <pvrabec>
Status: CLOSED RAWHIDE QA Contact: Brock Organ <borgan>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: barryn, mgarski, pri.rhl1, selinux, wtogami
Target Milestone: ---   
Target Release: ---   
Hardware: i386   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2005-01-17 11:22:32 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 136450    
Attachments:
Description Flags
My patch. Could not find that one from upstream none

Description Ralf Ertzinger 2005-01-15 17:03:28 UTC
From Bugzilla Helper:
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5)
Gecko/20041228 Firefox/1.0 Fedora/1.0-8

Description of problem:
cpio automatically dereferences symlinks while packing (as if the
option -L was passed, although it is not:

[sun@nausicaa ~/initrd :) 50]$ gunzip -c
/boot/initrd-2.6.10-1.1087_FC4.img | cpio -id
cpio: dev/systty: Operation not permitted
cpio: dev/console: Operation not permitted
cpio: dev/ram: Operation not permitted
cpio: dev/tty4: Operation not permitted
cpio: dev/null: Operation not permitted
cpio: dev/tty2: Operation not permitted
cpio: dev/tty3: Operation not permitted
cpio: dev/tty1: Operation not permitted
3798 blocks
[sun@nausicaa ~/initrd :) 51]$ find -type l
./bin/hotplug
./bin/modprobe
./bin/udevstart
./sbin
[sun@nausicaa ~/initrd :) 52]$ find . | cpio -c -o > ../initrd.img
6456 blocks
[sun@nausicaa ~/initrd :) 53]$ rm -rf *
[sun@nausicaa ~/initrd :) 54]$ cpio -id < ../initrd.img 
6456 blocks
[sun@nausicaa ~/initrd :) 55]$ find -type l
[sun@nausicaa ~/initrd :) 56]$

As can be seen, the symlinks are being dereferenced while packing.

Version-Release number of selected component (if applicable):
cpio-2.6-2

How reproducible:
Always

Steps to Reproduce:
1. Pack a file structure with symlinks (without -L)
2. Unpack it
3.
    

Actual Results:  Symlinks are being dereferenced

Expected Results:  No dereferencing unless requested

Additional info:

Comment 1 Tom London 2005-01-15 20:04:40 UTC
Backing up to cpio-2.5-9 works around this problem...sigh

Comment 2 Sammy 2005-01-16 01:30:53 UTC
The effect is even bigger when you pack/unpack (mkinitd) the kernel. 
Since the symlinks are not created you end with a empty /sbin for 
the initrd image and bunch of error messages during boot. Going 
back to 2.5-9 solves the problem too. 

Comment 3 Paul Iadonisi 2005-01-16 06:12:02 UTC
Dang, what a pain this was to track down.  I'm no expert with autotools, but if
you're using HAVE_* #define's, don't those have to be generated by your
configure script and set in config.h or something like that?

Take a look at lib/system.h and you'll see a '#define lstat stat' line that's
wrapped with a '#if !HAVE_LSTAT ...'  block, but I can't see anywhere in the
entire source tree where lstat is actually being checked for and HAVE_LSTAT
subsequently being set.  This code didn't exist in cpio-2.5.

Frankly, this looks like half finished code.  Not sure what the best fix is
other than just deleting that '#if' block altogether (I tried it and it does
work, at least for i386).

Comment 4 Marcin Garski 2005-01-16 16:32:06 UTC
Please look at:
http://lists.gnu.org/archive/html/bug-cpio/2005-01/msg00003.html

The bug has been fixed upstream.

Comment 5 Peter Vrabec 2005-01-17 11:21:43 UTC
Created attachment 109859 [details]
My patch. Could not find that one from upstream