Open with O_APPEND fails

Mel fbsd.questions at rachie.is-a-geek.net
Sun Dec 28 00:17:47 UTC 2008


On Saturday 27 December 2008 11:46:03 Mitar wrote:
> Hi!
>
> I discovered that open syscall with only O_APPEND fails with
> "permission denied" if an user does not have rights to write to a file
> (what is normal) even if it is root (what is a surprise). For example,
> if I have a file owned by www:www and with 644 permissions root cannot
> do open("testfile", O_APPEND) call. If I change ownership of I change
> permission to for example 666, call succeedes.
>
> This works on Linux (Debian). So this is a feature? Or a bug?
>
> (I discovered that because htpasswd failed to add new
> username/password pair (ran as root) to a file owner by www.)
>
> Checked on FreeBSD 7.0-STABLE.

Can't reproduce:

$ ls -al test.txt
-rw-r--r--  1 www  www  33 Dec 27 15:12 test.txt

$ sudo ./open
test.txt opened as fd 3

$ cat test.txt
this file
cannot be appended to

$ cat -n open.c
     1  #include <sys/types.h>
     2  #include <sys/uio.h>
     3  #include <unistd.h>
     4  #include <stdio.h>
     5  #include <fcntl.h>
     6  #include <err.h>
     7  #include <sysexits.h>
     8
     9  int main(void)
    10  {
    11          const char fname[] = "test.txt";
    12          const char txt[] = "cannot be appended to\n";
    13          int fd;
    14
    15          fd = open(fname, O_WRONLY|O_APPEND);
    16          if( fd < 0 )
    17                  err(EX_NOINPUT, "Failed to open %s", fname);
    18
    19          printf("%s opened as fd %i\n", fname, fd);
    20          if( write(fd, txt, sizeof(txt)) < 0 )
    21                  err(EX_DATAERR, "write()");
    22          close(fd);
    23          return EX_OK;
    24  }

-- 
Mel

Problem with today's modular software: they start with the modules
    and never get to the software part.


More information about the freebsd-questions mailing list