Exemple #1
0
int
rpl_fchownat (int fd, char const *file, uid_t owner, gid_t group, int flag)
{
# if FCHOWNAT_NOFOLLOW_BUG
  if (flag == AT_SYMLINK_NOFOLLOW)
    return local_lchownat (fd, file, owner, group);
# endif
# if FCHOWNAT_EMPTY_FILENAME_BUG
  if (file[0] == '\0')
    {
      errno = ENOENT;
      return -1;
    }
# endif
# if CHOWN_TRAILING_SLASH_BUG
  {
    size_t len = strlen (file);
    struct stat st;
    if (len && file[len - 1] == '/')
      {
        if (statat (fd, file, &st))
          return -1;
        if (flag == AT_SYMLINK_NOFOLLOW)
          return fchownat (fd, file, owner, group, 0);
      }
  }
# endif
  return fchownat (fd, file, owner, group, flag);
}
Exemple #2
0
/* Wrapper around fstatat to test stat behavior.  */
static int
do_stat (char const *name, struct stat *st)
{
  return statat (dfd, name, st);
}