Mail Archives: cygwin-developers/2002/05/21/15:57:16
--Boundary_(ID_OIrY0BZNPAvOmVMnuwa/kA)
Content-type: text/plain; charset=us-ascii
Content-transfer-encoding: 7BIT
Content-disposition: inline
I stumbled across a problem with path_conv::check() when scp-ing a
read-only file. I can reproduce the problem with the attached simple
test case, tchmod.cc. For example:
$ ls -l -d foo foo/readonly
ls: foo/readonly: No such file or directory
drwxr-xr-x 2 jt Domain U 0 May 21 15:13 foo
$ tchmod foo/readonly
$ ls -l -d foo foo/readonly
dr--r--r-- 2 jt Domain U 0 May 21 15:13 foo
-rw-r--r-- 1 jt Domain U 0 May 21 15:13 foo/readonly
Note that foo's permissions should not have changed and foo/readonly
should be read-only instead of read-write.
The expected results which can be forced by supplying a second argument
is:
$ ls -l -d foo foo/readonly
ls: foo/readonly: No such file or directory
drwxr-xr-x 2 jt Domain U 0 May 21 15:23 foo
$ tchmod foo/readonly 1
$ ls -l -d foo foo/readonly
drwxr-xr-x 2 jt Domain U 0 May 21 15:23 foo
-r--r--r-- 1 jt Domain U 0 May 21 15:23 foo/readonly
Unfortunately, I haven't figured out how to teach path_conv::check()
to deal with recently opened files. I'm also a little leery to perturb
this code. Any hints or help would be greatly appreciated.
Thanks,
Jason
--Boundary_(ID_OIrY0BZNPAvOmVMnuwa/kA)
Content-type: text/plain; charset=us-ascii; NAME=tchmod.cc
Content-transfer-encoding: 7BIT
Content-disposition: attachment; filename=tchmod.cc
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int
main(int argc, char* argv[])
{
char* path = argv[1];
int fd = open(path, O_WRONLY|O_CREAT, 0644);
if (fd == -1)
{
printf("open failed\n");
return 1;
}
if (argc > 2)
{
close(fd);
fd = open(path, O_WRONLY|O_CREAT, 0644);
}
int status = fchmod(fd, 0444);
if (status == -1)
{
printf("chmod failed\n");
return 2;
}
return 0;
}
--Boundary_(ID_OIrY0BZNPAvOmVMnuwa/kA)--
- Raw text -