bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: cp failure to NetApp directory with CIFS security model


From: Clarence Donath
Subject: Re: cp failure to NetApp directory with CIFS security model
Date: Thu, 01 Nov 2007 09:36:57 -0400

On Thu, 2007-11-01 at 08:36 +0100, Jim Meyering wrote:
> Fixing this for you may be tricky, since it sounds like
> your file system cannot be POSIX-compliant.
> 
> But first, have you tried a recent snapshot?
> 
>   http://meyering.net/cu/coreutils-6.9-ss.tar.gz
>   http://meyering.net/cu/coreutils-6.9-ss.tar.gz.sig
> 
> There have been changes in this area since 6.9.
> If that still fails, I suggest you run cp under strace or
> a debugger to see precisely which syscall is failing.  Let us know.
> The changes that I think are giving you trouble
> were required to eliminate some race conditions


Hello,

Thank you for investigating our issue.

This destination location is certainly not fully POSIX compliant.  It's
a method NetApp has developed to allow UNIX user access to be controlled
by Windows ACLs.

Using the recent snapshot exhibits the same behavior.


Running strace using cp v6.9-354-68c33a produces the following...

address@hidden:/p/inet->strace /usr/local/bin/cp /root/cron /p/inet
[snip]
stat64("/p/inet", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
stat64("/root/cron", {st_mode=S_IFREG|0644, st_size=486, ...}) = 0
stat64("/p/inet/cron", 0xbfb66bf4)      = -1 ENOENT (No such file or
directory)
open("/root/cron", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=486, ...}) = 0
open("/p/inet/cron", O_WRONLY|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = -1
EPERM (Operation not permitted)
write(2, "/usr/local/bin/cp: ", 19/usr/local/bin/cp: )     = 19
write(2, "cannot create regular file `/p/i"..., 41cannot create regular
file `/p/inet/cron') = 41
write(2, ": Operation not permitted", 25: Operation not permitted) = 25
write(2, "\n", 1
)                       = 1
close(3)                                = 0
close(0)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(1)                           = ?

The resultant destination file is created, but left empty by 'cp'.
A second 'cp' will succeed since the file was created by the first 'cp'.


Running strace using cp v6.6 successfully copies the file, and produces
the following...

address@hidden:/p/inet->strace /usr/local/bin/cp /root/cron /p/inet
[snip]
stat64("/p/inet", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
stat64("/root/cron", {st_mode=S_IFREG|0644, st_size=486, ...}) = 0
stat64("/p/inet/cron", 0xbf8e5954)      = -1 ENOENT (No such file or
directory)
open("/root/cron", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=486, ...}) = 0
open("/p/inet/cron", O_WRONLY|O_CREAT|O_LARGEFILE, 0644) = 4
fstat64(4, {st_mode=S_IFREG|0777, st_size=0, ...}) = 0
read(3, "address@hidden"..., 32768) = 486
write(4, "address@hidden"..., 486) = 486
close(4)                                = 0
close(3)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?

The new open() call causes cp to terminate.  Is it the O_EXCL causing
this?

What concerns me is the following from the open() man page...

        O_EXCL is broken on  NFS  file  systems; programs which rely on
it for performing
        locking tasks will contain a race condition.


Best regards,
Clarence Donath





reply via email to

[Prev in Thread] Current Thread [Next in Thread]