Voltar à lista
Linux x86_64Usuários & permissões#452

fchmodat2

Como fchmodat, mas com suporte real a AT_SYMLINK_NOFOLLOW para alterar permissões sem seguir links simbólicos.

Descrição

Corrige uma lacuna de longa data: por décadas, alterar o modo de um link simbólico sem seguir o link foi impossível via syscall (mesmo `lchmod` nunca existiu no Linux). `fchmodat2` finalmente expõe esse comportamento.

man 2Desde o kernel 6.6

Assinatura

int fchmodat2(int dirfd, const char * pathname, mode_t mode, int flags);

Parâmetros

ParâmetroTipoDescrição
dirfdintDescritor do diretório base, ou AT_FDCWD.
pathnameconst char *Caminho, absoluto ou relativo a `dirfd`.
modemode_tNovo modo de permissão.
flagsintAT_SYMLINK_NOFOLLOW, entre outras.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1dirfdint
rsiargumento 2pathnameconst char *
rdxargumento 3modemode_t
r10argumento 4flagsint

Valor de retorno

0 em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EACCES(13)
Permissão negada.
EBADF(9)
Descritor de arquivo inválido.
ENOENT(2)
Arquivo ou diretório inexistente.
ENOTDIR(20)
Não é um diretório.
EOPNOTSUPP(95)
Operação não suportada nesse socket/arquivo (também ENOTSUP).

Relacionadas