Bug 453208

Summary: perl -e file test misses broken symlinks
Product: Red Hat Enterprise Linux 4 Reporter: Steve <smithsg>
Component: perlAssignee: Marcela Mašláňová <mmaslano>
Status: CLOSED NOTABUG QA Contact: desktop-bugs <desktop-bugs>
Severity: low Docs Contact:
Priority: low    
Version: 4.0   
Target Milestone: rc   
Target Release: ---   
Hardware: i386   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2008-08-14 12:57:23 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:

Description Steve 2008-06-27 19:52:17 UTC
Description of problem:


Version-Release number of selected component (if applicable):
perl-5.8.5-16.RHEL4

How reproducible:
100%

Steps to Reproduce:
1. create a directory (mkdir /tmp/test1)
2. make a symlink to it (ln -s /tmp/test1 /tmp/linktest1)
3. move or delete the directory (mv /tmp/test1 /tmp/test1moved)
4. now the link is broken, so try running this script:

my $filename = "/tmp/linktest1";
my $directory = "/tmp";

chomp($filename);
if( -e $filename)
{
    `/bin/rm -f $filename`;
}

chomp($directory);
if( -d $directory)
{
    `/bin/ln -s /tmp/test1moved $filename`;
}



Actual results:
The script gives this for output:

/bin/ln: `/tmp/linktest1': File exists

Basically, it does not enter the first if statement, and the broken link is 
not deleted.  However, if you replace the "-e" test with the "-l" test, the 
broken link is deleted.  

Expected results:

I would expect that the -e flag with see the broken link as a file, which 
would then cause it to be deleted.  Note that the above test program does work 
fine if the link is not broken.  

Additional info:  Obviously, I don't really need the rm command inside of the 
if statement, because it doesn't really matter if the file exists or not.  
However, I noticed that the -e flag didn't work as I expected it to, and I 
thought someone else might run into it unexpectedly on something more 
important.  Let me know if you need more info.

Comment 1 Marcela Mašláňová 2008-08-14 12:57:23 UTC
This must be a conventional behaviour. If you try the same with bash, it ends the same way.